Free interactive tool
Tag Coverage Calculator: Page Views Your Tag Never Sees
A visitor-identification tag can only identify the visits it records, and every rate you compute from the tag’s own data starts after the visits it never saw. This calculator compares the page views your tag recorded with the human page views in your server or CDN logs for the same pages and dates. It then splits the gap into the part your consent platform’s numbers account for and the part nothing on your side explains: blockers, script errors, visitors who left before the tag loaded, and bots the log filter missed. The second part is the one you can fix.
The formula
coverage = tag views ÷ log views held for consent = log views × no-consent share allowed views = log views − held for consent missed while allowed = allowed views − tag views miss rate = missed while allowed ÷ allowed views missed while allowed < 0 → the tag counts more than the logs allow
The server log is the reference because it records the request for the page whether or not any script ran in the browser. The consent share comes from your consent platform, so the split is only as good as that number: the section below explains how to get it and which way it is biased. Totals are summed across rows before the rates are computed, so a large page group weighs more than a small one.
Run your numbers
One row per page group, same date range for every number. Log page views are full page loads of HTML documents in your server or CDN logs, after the bot filter. Tag page views come from the tool that receives the tag’s hits, for the same pages. The consent share is the percentage of page views where the visitor did not allow the tag’s cookie category, including visitors who never answered the banner.
| Page group | Log page views (bots filtered) | Tag page views | No consent for the tag, % | Remove |
|---|---|---|---|---|
- Human page views in the logs
- 24,000
- Page views the tag recorded
- 12,700
- Tag coverage
- 52.9%
- Held for consent
- 9,400
- Missed while allowed
- 1,900 (13.0%)
| Page group | Coverage | Held for consent | Missed while allowed |
|---|---|---|---|
| Pricing and demo pages | 57.5% | 1,400 | 300 (11.5%) |
| Blog | 52.0% | 8,000 | 1,600 (13.3%) |
Tag coverage — visitorops.com/tools/tag-coverage-calculator Rows | log views | tag views | coverage | held for consent | missed while allowed Pricing and demo pages | 4,000 | 2,300 | 57.5% | 1,400 | 300 (11.5%) Blog | 20,000 | 10,400 | 52.0% | 8,000 | 1,600 (13.3%) All rows | 24,000 | 12,700 | 52.9% | 9,400 | 1,900 (13.0%)
The pre-filled rows are a hypothetical example, not a benchmark. Nothing you enter leaves your browser.
Worked example (hypothetical numbers)
A B2B site compares one week of logs with its tag (hypothetical numbers, the tool’s default input). Pricing and demo pages: 4,000 human page views in the CDN logs, 2,300 recorded by the tag, and 35% of views without consent for the tag’s category. Blog: 20,000 in the logs, 10,400 recorded, 40% without consent.
Overall the tag recorded 12,700 of 24,000 human page views, a coverage of 52.9%. Consent accounts for 9,400 of the 11,300 missing. The other 1,900 are 13.0% of the 14,600 views visitors allowed: on pricing and demo pages 300 of 2,600 (11.5%), on the blog 1,600 of 12,000 (13.3%). The team’s next step is the tag QA script with a content blocker switched on, and a check of how late the tag loads on blog templates. The consent part is a policy decision, not a bug, and no tag change recovers it.
How do you count human page views in the logs?
Count only what a browser tag could also have counted: successful (HTTP 200) GET requests for HTML documents on the pages in the row, over the same dates as the tag report. Then remove:
- Declared bots. User agents that name themselves as crawlers, and verified search crawlers. Google publishes its crawler IP ranges as JSON files and a reverse-DNS check in Verifying Googlebot and other Google crawlers (read 2026-09-26).
- Prefetches. Browsers mark prefetch requests with a
Sec-Purpose: prefetchheader, and MDN (read 2026-09-26) notes that a server may treat these differently when counting page visits. A prefetched page that is never opened runs no script, so it is not a missed visit. - Your own monitoring. Uptime checks, load tests and preview crawlers from your own IP ranges.
Take the count from the CDN if the CDN serves cached HTML: an origin log does not see a page served from the cache, and the tag does. If the site is a single-page app, the tag records route changes as page views and the server never sees them, so compare only first page loads, or a page group the app renders on the server.
Where does the no-consent share come from?
From the consent platform that holds the tag, for the cookie category the tag is assigned to (the consent-hold guide shows where that assignment is made in OneTrust, Cookiebot and CookieYes). Two details decide whether the number is usable:
- Visitors who never answer count as no consent. Cookiebot’s support article on traffic drops after installing its banner (updated 2026-08-25, read 2026-09-26) says that under explicit consent a visitor who ignores the banner and leaves gives no consent and is not recorded, and that a visitor who opts out is not recorded on return visits either. If your platform reports an opt-in rate out of banner responses only, the share of visitors with no consent is higher than one minus that rate.
- Consent reports count people or answers, the log counts page views. CookieYes’s Consent Trends and Pageviews reports (read 2026-09-26) show banner responses as accepted, rejected and partially accepted, and count a page view each time a page with the CookieYes script loads. If visitors who never consent view fewer pages than those who accept (a visitor who ignores the banner and leaves has viewed one), the share of page views without consent is lower than the share of visitors, and a visitor-based share overstates the consent part. So enter one minus the opt-in rate over all visitors who saw the banner, not over answers, and read the missed number as a floor: in that case the true loss beyond consent is larger.
What should you do with the result?
- Missed while allowed under about 10%. Our rule of thumb, not an industry figure: the tag records most of what it is allowed to, and the remaining gap is mostly consent. Use the log count, not the tag’s count, when you explain to sales why the identified-visitor list is shorter than the traffic report.
- Missed while allowed above that. Something other than consent stops the tag. Run the post-launch tag QA with a content blocker on and off, check the browser console for a Content-Security-Policy block, and check whether the tag waits for a late event (a tag manager trigger on window load, or a consent callback that only fires on the next page). A page group far worse than the others points at its template.
- Negative missed. The tag counts more views than the logs allow. Check for a tag that fires twice, route changes the logs cannot see, a bot filter that removed real visitors, or a no-consent share that is too high.
Coverage also sets the ceiling on your match rate: a vendor can only identify visits its tag recorded. If a match-rate drop shows no traffic-mix cause and no segment rate change, compare coverage in the two periods: a fall in coverage lowers the count of identified visits without moving a rate computed over the tag’s own sessions.
When does the comparison not work?
- The tag reports sessions or companies, not page views. Some identification tools report only identified companies. Use the page-view count from the analytics tag that the same consent category holds, or from the vendor’s raw hit export if it has one; do not compare a company count with a page-view count.
- Bots the filter missed. Headless browsers that pass as real ones stay in the log count and lower coverage. They can also run the tag, so they raise both sides at once. A sudden rise in log views with no rise in tag views on one page group is more often a bot than a tag failure.
- Different time zones or dates. Logs are often in UTC and analytics in the property’s time zone. Use a full week so the edges matter less.