{"id":180,"date":"2026-08-10T14:00:00","date_gmt":"2026-08-10T14:00:00","guid":{"rendered":"https:\/\/vectormatch.dev\/blog\/mention-rate-is-a-proportion\/"},"modified":"2026-08-10T20:42:24","modified_gmt":"2026-08-10T20:42:24","slug":"mention-rate-is-a-proportion","status":"publish","type":"post","link":"https:\/\/vectormatch.dev\/blog\/mention-rate-is-a-proportion\/","title":{"rendered":"Mention Rate Is a Proportion, Not a Fact"},"content":{"rendered":"<p class=\"vm-lead\">Everyone reporting AI visibility numbers is reporting a sample statistic as a fact. I did this job by hand for Google in 2008, and the discipline was better then.<\/p>\n<div class=\"vm-tldr\">\n<p class=\"vm-tldr-label\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"width:.9rem;height:.9rem;\"><path d=\"M13 2 3 14h9l-1 8 10-12h-9l1-8z\"\/><\/svg>The short answer<\/p>\n<p>I ended my last post saying I had been tuning longer than I had been measuring. That is not a personal failing \u2014 it is the condition of the field. AI visibility reporting, as currently practised, takes a sample proportion from twenty queries and reports it as a fact. In 2008 I worked as a search quality rater for Google through Lionbridge, and the method we used then was more rigorous than what passes for measurement now. The math has not changed. The willingness to use it has.<\/p>\n<\/div>\n<h2>The Condition, Not the Person<\/h2>\n<p>I ended my last post saying I had been tuning longer than I had been measuring. I want to be clear about what that means. It is not a personal confession of negligence. It is the condition of the field. Almost everyone publishing numbers about AI visibility \u2014 how often a brand appears in model outputs, how often a page gets cited, how often a product surfaces in a recommendation \u2014 is reporting a sample statistic as a fact. They are taking twenty queries, counting eight mentions, and writing &quot;40%&quot; in a dashboard. The 40% is real. The precision implied by reporting it without an interval is not.<\/p>\n<p>I know this because I once worked somewhere the discipline was enforced. The method was boring and it worked. Then the measurement problem got harder, and the field responded by getting less rigorous. That is the sentence this post is built around.<\/p>\n<h2>What the Work Actually Was<\/h2>\n<p>In 2008, I worked as a search quality rater for Google through Lionbridge. The programme exists, the guidelines are public, and the method is safe ground to describe. The specifics of my engagement \u2014 which queries, which locale, which period \u2014 are covered by confidentiality terms that do not expire. What I can describe is the method, because Google publishes it.<\/p>\n<p>The current version of the <a href=\"https:\/\/ppc.land\/content\/files\/2025\/01\/searchqualityevaluatorguidelines-01232025.pdf\" target=\"_blank\" rel=\"noopener\">Search Quality Rater Guidelines<\/a> is 181 pages, dated January 23, 2025, version 10.1. The structure I worked under in 2008 was simpler but the bones were the same. A fixed set of queries. A published rubric. Multiple raters on the same queries. Periodic reports. The rubric told you what &quot;needs met&quot; meant and what &quot;page quality&quot; meant, and you applied it. You did not apply your opinion. You applied the rubric.<\/p>\n<p>Three disciplines made it work:<\/p>\n<p><strong>You report what the rubric says, not what you think.<\/strong> If the rubric says a page &quot;fully meets&quot; a query and you think the page is terrible, you still mark it &quot;fully meets.&quot; The rubric is the measurement instrument. Your opinion is not. This is the first thing the training teaches, and it is the first thing the AI visibility field has forgotten.<\/p>\n<p><strong>Disagreement between raters is data, not noise.<\/strong> Two raters look at the same query-result pair. One says &quot;fully meets,&quot; the other says &quot;slightly meets.&quot; That disagreement is not a problem to be resolved by averaging. It is a signal that the query is ambiguous or the rubric is unclear. Google tracks inter-rater agreement as a quality metric. If agreement drops, the rubric gets clarified. The disagreement itself is treated as a measurement of the measurement.<\/p>\n<p><strong>The query set is chosen before you look at results.<\/strong> You do not pick queries that you know will produce good results. You do not pick queries after seeing the output and curating the ones that support your hypothesis. The query set is frozen before any rating happens. This is the difference between an experiment and a sales pitch. I will come back to this.<\/p>\n<h2>What Changed, and What Got Worse<\/h2>\n<p>Then: an index returned ten links. The same ten links for everyone, the same ten links tomorrow. The measurement problem was hard but stable. You could run the same query next week and compare. The result set was deterministic.<\/p>\n<p>Now: a model generates prose that varies by session, by phrasing, by temperature, by version, by who is asking. The same query can return a different answer in the same hour. The measurement problem got harder. The field responded by getting less rigorous. That is the sentence.<\/p>\n<p>The old discipline was designed for a deterministic system and it was still hard to enforce. The new system is non-deterministic, and the discipline most people are applying to it is weaker than what Google applied to ten blue links in 2008. The tools got worse. The rigour collapsed. The dashboards got prettier.<\/p>\n<figure class=\"vm-figure\"><img decoding=\"async\" src=\"https:\/\/vectormatch.dev\/blog\/wp-content\/uploads\/2026\/08\/photo-1717501218456-c4789b65fc21-1.jpg\" alt=\"Comparison diagram showing deterministic search results in 2008 versus non-deterministic AI model outputs in 2026, with measurement discipline declining\" loading=\"lazy\"><figcaption>Then: ten links, same for everyone, same tomorrow. Now: generated prose that varies by session. The measurement problem got harder. The field got less rigorous.<\/figcaption><\/figure>\n<h2>The Arithmetic<\/h2>\n<p>Here is a number someone will put in a dashboard: &quot;We appear in 40% of AI answers.&quot;<\/p>\n<p>Twenty queries. Eight mentions. Eight divided by twenty is 0.40. That is the sample proportion. It is a real number. It is not a fact about the population.<\/p>\n<p>The 95% Wilson score interval for eight successes out of twenty trials is 21.9% to 61.3%. I will show the calculation so you can check it.<\/p>\n<p>The Wilson interval for a proportion is:<\/p>\n<pre><code>  p&#770; + z\u00b2\/(2n)         z &middot; &radic;(p&#770;(1-p&#768;)\/n + z\u00b2\/(4n\u00b2))\n  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  &plusmn;  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n     1 + z\u00b2\/n                1 + z\u00b2\/n<\/code><\/pre>\n<p>Where p&#770; = 8\/20 = 0.40, n = 20, z = 1.96 (the 95% normal quantile).<\/p>\n<pre><code>  Denominator:  1 + 1.96\u00b2\/20 = 1 + 0.19208 = 1.19208\n\n  Centre:  (0.40 + 1.96\u00b2\/40) \/ 1.19208\n         = (0.40 + 0.09604) \/ 1.19208\n         = 0.49604 \/ 1.19208\n         = 0.4162\n\n  Margin:  1.96 &middot; &radic;(0.40 &times; 0.60 \/ 20 + 1.96\u00b2\/(4 &times; 400)) \/ 1.19208\n         = 1.96 &middot; &radic;(0.012 + 0.002401) \/ 1.19208\n         = 1.96 &middot; &radic;0.014401 \/ 1.19208\n         = 1.96 &middot; 0.12000 \/ 1.19208\n         = 0.23521 \/ 1.19208\n         = 0.1973\n\n  Lower:  0.4162 - 0.1973 = 0.2189 &rarr; 21.9%\n  Upper:  0.4162 + 0.1973 = 0.6135 &rarr; 61.3%<\/code><\/pre>\n<p>So the honest statement is: &quot;We appear in between 21.9% and 61.3% of AI answers, with 95% confidence, based on twenty queries.&quot; That is what the data supports. &quot;40%&quot; is what the data suggests. The difference between &quot;supports&quot; and &quot;suggests&quot; is the difference between a measurement and a guess.<\/p>\n<p>Now the part that lands hardest. To report &quot;40%, plus or minus 5%&quot; \u2014 a margin of error that actually narrows the interval to something useful \u2014 you need roughly 370 queries, not 20.<\/p>\n<p>The sample size formula for a proportion at a given margin of error:<\/p>\n<pre><code>  n = z\u00b2 &middot; p(1-p) \/ E\u00b2\n    = 1.96\u00b2 &times; 0.40 &times; 0.60 \/ 0.05\u00b2\n    = 3.8416 &times; 0.24 \/ 0.0025\n    = 0.9220 \/ 0.0025\n    &asymp; 369<\/code><\/pre>\n<p>Almost nobody selling AI visibility reporting is running 370 queries. The dashboards I have seen report numbers based on 15 to 30. At n=20, your margin of error at 95% confidence is &plusmn;19 percentage points. The number in the dashboard has two digits of precision. The method supports zero.<\/p>\n<h2>Why Repeated Sampling Helps Less Than You&#8217;d Hope<\/h2>\n<p>Because model output is non-deterministic, the obvious fix is to run each query five times. Twenty queries times five runs is 100 observations. Problem solved, right?<\/p>\n<p>No. Those are not 100 independent trials. They are 20 clusters of 5. The five runs of the same query share a cluster \u2014 the same query phrasing, the same model version, the same session context. A na&iuml;ve confidence interval computed on 100 observations will be too narrow because it assumes 100 independent data points. The effective sample size is somewhere between 20 and 100, and without a clustering correction, you do not know where.<\/p>\n<p>The fix is a cluster-robust standard error, or a hierarchical model that accounts for within-cluster correlation. The simpler fix is to report the number of distinct queries, not the number of runs, when stating the interval. The honest fix is to say: &quot;We ran 20 queries, each 5 times, and observed mentions in 8 of 20 query clusters.&quot; That brings you back to a Wilson interval on n=20, which is 21.9% to 61.3% \u2014 the same wide interval you started with. Repeated sampling buys you stability within a query, not independence across queries.<\/p>\n<p>This is the section that separates this post from most of what is written about AEO measurement. Most people do not know this. The ones who do know it do not mention it, because mentioning it makes their numbers worse. A dashboard that says &quot;40% &plusmn; 19 points&quot; does not sell. A dashboard that says &quot;40%&quot; does.<\/p>\n<h2>What a Defensible Protocol Looks Like<\/h2>\n<p>Here is a protocol that would produce numbers worth defending. Six rules, stated plainly:<\/p>\n<ol>\n<li><strong>Fix the query set before you look at any result.<\/strong> Write the queries down. Commit them to a file. Date the file. Do not change the queries after you have seen the outputs. If you add queries, start a new dataset. This is the single most important rule and it is the one most frequently broken.<\/li>\n<li><strong>State the model, the version, and the date.<\/strong> &quot;GPT-4o, 2026-08-10&quot; is a measurement. &quot;AI answers&quot; is not. Model behaviour changes between versions. A number measured against one model version does not apply to another. If you do not state the version, your number cannot be reproduced.<\/li>\n<li><strong>Repeat each query; report how many times.<\/strong> Non-deterministic output means a single run is a single draw from a distribution. Report the number of runs per query and the number of mentions per query. &quot;8 of 20 queries produced at least one mention in 5 runs&quot; is a different statement from &quot;8 of 100 runs produced a mention.&quot; Both are valid. They answer different questions.<\/li>\n<li><strong>Report the proportion with an interval, and say which interval.<\/strong> Wilson, Clopper-Pearson, Agresti-Coull \u2014 they are all defensible. &quot;40%&quot; with no interval is not. State the method, the confidence level, and the bounds. If the interval is wide, the number is uncertain. Say so.<\/li>\n<li><strong>Log the URLs the model cited, not just whether you appeared.<\/strong> A mention without a citation is a statement. A mention with a citation is a signal. The URL the model chose to cite is the thing you can act on \u2014 it tells you which source the model is retrieving. If you only track &quot;did we appear,&quot; you are measuring visibility without measuring the mechanism that produces it.<\/li>\n<li><strong>Never report a number more precise than the method supports.<\/strong> If your sample size is 20, report &quot;between 22% and 61%.&quot; If your sample size is 370, report &quot;40% &plusmn; 5%.&quot; The number of decimal places is a claim about precision. Do not make a claim the method cannot back.<\/li>\n<\/ol>\n<h2>The Uncomfortable Finding<\/h2>\n<p>When you run a protocol like this \u2014 when you freeze the query set, log the citations, and look at what actually moves the answer \u2014 the finding is uncomfortable. What moves the answer is usually which third-party sources get retrieved. Not your page. Not your schema. Not your content. The model cites a source it has already retrieved, and that source mentions you or it does not.<\/p>\n<p>Your own page is rarely the lever. The lever is whether the model retrieves a source that has already mentioned you. This is a retrieval problem, not a content problem. It is also not something you can directly control \u2014 you can control your page, you can control your schema, you cannot control which review site or aggregator or directory the model decides to pull from for a given query.<\/p>\n<p>Nobody selling an AEO dashboard wants to say this out loud. The dashboards imply that the lever is your content, your schema, your structured data. If the lever is a third-party source you do not control, the dashboard&#8217;s recommended actions \u2014 add more JSON-LD, restructure your headings, write more FAQ pages \u2014 are not addressing the thing that actually moves the number. Which is a reason to say it.<\/p>\n<h2>What Schema Does and Doesn&#8217;t Do<\/h2>\n<p>Structured data \u2014 JSON-LD, microdata, schema.org vocabulary \u2014 does two things well. It aids entity resolution: telling a model that &quot;Apple&quot; on this page refers to the company, not the fruit. And it aids disambiguation: telling a model that this page is about a product, this is the price, this is the availability. These are real functions. I use structured data on my own sites. It is not useless.<\/p>\n<p>What structured data does not do is cause citation. Google has been explicit about this. John Mueller stated it publicly: &quot;There&#8217;s no generic ranking boost for SD [structured data] usage&#8230; SD can make it easier to understand what the page is about, which can make it easier to show where it&#8217;s relevant (improves targeting, maybe ranking for the right terms).&quot; Google&#8217;s Search Central documentation says structured data &quot;helps Google understand the content of the page&quot; and can make a page &quot;eligible for rich results.&quot; Understanding and eligibility are not citation. Understanding is what the model does with the content. Eligibility is whether the content qualifies for a feature. Neither is a mechanism that causes a model to cite your page in a generated answer.<\/p>\n<p>I have not found a published controlled study that links JSON-LD implementation to mention rate in LLM outputs. There are case studies. There are vendor whitepapers. There is no study that holds content constant, varies structured data, and measures the effect on citation frequency in model outputs with a confidence interval. The absence of this study is not proof that schema does not help. It is proof that the claim &quot;schema improves AI visibility&quot; is not supported by the evidence standard the field should be holding itself to.<\/p>\n<p>This is consistent with the uncomfortable finding above. If what moves the answer is which third-party sources get retrieved, then adding schema to your own page addresses a different layer of the stack than the one that determines whether you get cited. Schema helps a model understand your page. Retrieval determines whether the model reads your page. These are different problems.<\/p>\n<h2>Close<\/h2>\n<p>Rater discipline was boring and it worked. You reported what the rubric said. You treated disagreement as data. You froze the query set before you looked. The method was not exciting. The numbers were defensible.<\/p>\n<p>The measurement problem is harder now. Models are non-deterministic, outputs vary by session, and the population you are sampling from shifts every time a model gets updated. That is precisely why the discipline matters more, not less. A deterministic system forgives sloppy method because you can repeat the query and check. A non-deterministic system does not forgive it because you cannot. The number you measured today may not be the number tomorrow, and without an interval, you cannot tell the difference between sampling noise and a real change.<\/p>\n<p>Report the interval. State the model and the date. Freeze the query set. If your method cannot support the precision you are claiming, your number is not a fact. It is a sample statistic wearing a fact&#8217;s clothes.<\/p>\n<p>A full study, with a frozen query set, a published protocol, and per-store results \u2014 is coming. This post teaches the method. It does not publish the results.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"author\": {\n    \"@id\": \"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/#person\"\n  }\n}\n<\/script><\/p>\n<section class=\"vm-faq\" aria-labelledby=\"vm-faq-heading\">\n<h2 id=\"vm-faq-heading\">Frequently Asked Questions<\/h2>\n<div class=\"vm-faq-list\">\n<details class=\"vm-faq-item\" id=\"vm-faq-item-1\">\n<summary class=\"vm-faq-question\" style=\"padding-left: 1rem; cursor: pointer;\">What is the Wilson score interval and why use it instead of a normal approximation for mention rate?<\/summary>\n<div class=\"vm-faq-answer\">The Wilson score interval is a confidence interval for a binomial proportion that behaves correctly at small sample sizes and near the boundaries of 0% and 100%. The normal approximation (p \u00b1 1.96 \u00d7 \u221a(p(1-p)\/n)) breaks down when n is small or p is close to 0 or 1 \u2014 it can produce intervals that extend below 0% or above 100%, which are impossible. The Wilson interval cannot. For twenty queries with eight mentions, the normal approximation gives 40% \u00b1 21.6%, which extends below 20%. The Wilson interval gives 21.9% to 61.3%, which is always valid. At n=370 the two converge, but at the sample sizes most AI visibility tools actually use, only Wilson is defensible.<\/div>\n<\/details>\n<details class=\"vm-faq-item\" id=\"vm-faq-item-2\">\n<summary class=\"vm-faq-question\" style=\"padding-left: 1rem; cursor: pointer;\">Why doesn&#8217;t running the same query five times give you five independent data points?<\/summary>\n<div class=\"vm-faq-answer\">Because the five runs share the same query phrasing, model version, and session context. They are clustered \u2014 observations within a cluster are more similar to each other than to observations from other clusters. A confidence interval computed on 100 runs as if they were 100 independent trials will be too narrow, because it does not account for within-cluster correlation. The effective sample size is somewhere between 20 (the number of distinct queries) and 100 (the total runs), and without a clustering correction you do not know where. The conservative approach is to report the interval based on the number of distinct queries, not the number of runs.<\/div>\n<\/details><\/div>\n<p>  <script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"What is the Wilson score interval and why use it instead of a normal approximation for mention rate?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"The Wilson score interval is a confidence interval for a binomial proportion that behaves correctly at small sample sizes and near the boundaries of 0% and 100%. The normal approximation (p \u00b1 1.96 \u00d7 \u221a(p(1-p)\/n)) breaks down when n is small or p is close to 0 or 1 \u2014 it can produce intervals that extend below 0% or above 100%, which are impossible. The Wilson interval cannot. For twenty queries with eight mentions, the normal approximation gives 40% \u00b1 21.6%, which extends below 20%. The Wilson interval gives 21.9% to 61.3%, which is always valid. At n=370 the two converge, but at the sample sizes most AI visibility tools actually use, only Wilson is defensible.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Why doesn't running the same query five times give you five independent data points?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Because the five runs share the same query phrasing, model version, and session context. They are clustered \u2014 observations within a cluster are more similar to each other than to observations from other clusters. A confidence interval computed on 100 runs as if they were 100 independent trials will be too narrow, because it does not account for within-cluster correlation. The effective sample size is somewhere between 20 (the number of distinct queries) and 100 (the total runs), and without a clustering correction you do not know where. The conservative approach is to report the interval based on the number of distinct queries, not the number of runs.\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n<\/section>\n<p>The discipline I learned as a search quality rater in 2008 was simple: report what the rubric says, treat disagreement as data, freeze the query set before you look. The system we were measuring was deterministic \u2014 ten links, same for everyone, same tomorrow. The discipline was still hard to enforce. Now the system is non-deterministic, and the discipline most of the field applies is weaker than what Google used for ten blue links.<\/p>\n<p>The math has not changed. Eight mentions out of twenty queries is a 40% sample proportion with a 95% Wilson interval of 21.9% to 61.3%. To narrow that to \u00b15%, you need roughly 370 queries. Almost nobody running AI visibility dashboards is doing that. Repeated sampling helps less than you would hope because runs of the same query are clustered, not independent. The honest interval is still wide.<\/p>\n<p>What actually moves the answer is usually which third-party sources the model retrieves, not your own page or your schema. Structured data aids entity resolution and disambiguation \u2014 real functions \u2014 but Google&#8217;s own public statements say it aids understanding and feature eligibility, not ranking. No published controlled study links JSON-LD to mention rate in LLM outputs. The claim is not supported by the evidence standard the field should be holding itself to.<\/p>\n<p>Report the interval. State the model and the date. Freeze the query set. A full study is coming. This post teaches the method.<\/p>\n<div class=\"vm-cta\"><a href=\"https:\/\/vectormatch.dev\" class=\"btn-brand\">I build VectorMatch \u2014 it matches developers to roles by semantic fit \u2192<\/a><\/div>\n<div class=\"vm-author-box\">\n<p><strong>Du\u0161an Kne\u017eevi\u0107<\/strong><\/p>\n<p>I design and build VectorMatch end to end \u2014 the matching pipeline, the infrastructure underneath it, and this blog. Before software, I spent seven years on the commercial side and a period as a search quality rater for Google through Lionbridge, evaluating what the index returned across five Balkan markets against a published rubric. You can read more at <a href=\"https:\/\/vectormatch.dev\/blog\/dusan-knezevic\/\">my author page<\/a>.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Everyone reporting AI visibility numbers is reporting a sample statistic as a fact. I did this job by hand for Google in 2008, and the discipline was better then.<\/p>\n","protected":false},"author":1,"featured_media":179,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[34,44],"class_list":["post-180","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering-notes","tag-ai","tag-production"],"_links":{"self":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/posts\/180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/comments?post=180"}],"version-history":[{"count":1,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/posts\/180\/revisions"}],"predecessor-version":[{"id":181,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/posts\/180\/revisions\/181"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/media\/179"}],"wp:attachment":[{"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/media?parent=180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/categories?post=180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectormatch.dev\/blog\/wp-json\/wp\/v2\/tags?post=180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}