
{"id":1301,"date":"2026-07-15T07:21:16","date_gmt":"2026-07-15T07:21:16","guid":{"rendered":"https:\/\/maxaeo.ai\/blog\/count-ai-citations-accurately\/"},"modified":"2026-07-15T07:21:16","modified_gmt":"2026-07-15T07:21:16","slug":"count-ai-citations-accurately","status":"publish","type":"post","link":"https:\/\/maxaeo.ai\/blog\/count-ai-citations-accurately\/","title":{"rendered":"How to Count AI Citations Accurately"},"content":{"rendered":"<p>To learn <strong>how to count AI citations accurately<\/strong>, record every user-visible source reference, resolve its destination, normalize the URL, assign a content identity, and deduplicate it within each AI response. Report raw occurrences, response-level citations, unique content assets, and domains separately\u2014never as one unlabeled total.<\/p>\n<p>The most defensible default metric is a <strong>response-level content citation<\/strong>: count each distinct content asset once per AI response. This prevents repeated links, tracking parameters, redirects, and alternate page formats from inflating results while allowing the same source to count across separate answers.<\/p>\n<h2>How to count AI citations accurately in 10 steps<\/h2>\n<ol>\n<li><strong>Define one visible citation event.<\/strong> Count a source link, card, footnote, or supporting-source item shown to the user\u2014not every hidden or duplicated HTML anchor.<\/li>\n<li><strong>Preserve the raw evidence.<\/strong> Store the engine, surface, prompt, run ID, source label, original target, placement, and observation time.<\/li>\n<li><strong>Resolve wrappers and redirects.<\/strong> Record every hop, final destination, status code, and retrieval failure.<\/li>\n<li><strong>Normalize safe URL syntax.<\/strong> Standardize the scheme, hostname, default ports, and equivalent percent-encoding without altering meaningful paths.<\/li>\n<li><strong>Classify parameters and fragments.<\/strong> Remove only values proven not to change the underlying content.<\/li>\n<li><strong>Assign separate identities.<\/strong> Keep normalized URL, content asset, host, registrable domain, and publisher IDs distinct.<\/li>\n<li><strong>Deduplicate within each response.<\/strong> Count one <code>(response ID, content asset ID)<\/code> combination for the primary content-citation metric.<\/li>\n<li><strong>Classify ownership.<\/strong> Separate owned, earned, syndicated, and unresolved citations.<\/li>\n<li><strong>Use honest denominators.<\/strong> Report completed responses, scheduled runs, failed runs, and unresolved source events.<\/li>\n<li><strong>Version the rules.<\/strong> Save the normalization policy, domain list, ownership map, and evidence used for every reporting period.<\/li>\n<\/ol>\n<h2>What is an AI citation?<\/h2>\n<p><strong>An AI citation is a user-visible source reference attached to a generated answer and identifiable by a source label, URL, or document. Count the visible reference as evidence, then deduplicate it at URL, content-asset, domain, and response levels. A brand mention without a source reference is not a citation.<\/strong><\/p>\n<p>A citation does not automatically mean that the cited brand was recommended. These are separate observations:<\/p>\n<table>\n<thead>\n<tr>\n<th>Observation<\/th>\n<th>What it proves<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Brand named without a source<\/td>\n<td>The brand received a mention<\/td>\n<\/tr>\n<tr>\n<td>Brand-owned page cited<\/td>\n<td>The brand supplied a surfaced source<\/td>\n<\/tr>\n<tr>\n<td>Third-party page about the brand cited<\/td>\n<td>An external source influenced the answer<\/td>\n<\/tr>\n<tr>\n<td>Brand included in a shortlist<\/td>\n<td>The brand received recommendation visibility<\/td>\n<\/tr>\n<tr>\n<td>Brand described positively or negatively<\/td>\n<td>The answer expressed a reputation signal<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Source cards require a consistent capture policy. If one card contains a clickable title, image, and domain label pointing to the same destination, treat it as <strong>one visible citation occurrence<\/strong>, not three DOM links. If the same source appears inline and again in a separate sources panel, preserve both placements as raw occurrences but deduplicate them for response-level URL and content metrics.<\/p>\n<p>A visible source label with no retrievable URL should remain an <strong>unresolved citation event<\/strong>. Do not guess its domain or silently remove it.<\/p>\n<h2>Which citation units should be reported separately?<\/h2>\n<p><strong>There is no universally correct \u201ctotal citations\u201d number. Each unit answers a different question, so accurate reporting labels the identity level and deduplication scope.<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Measurement unit<\/th>\n<th>Counting rule<\/th>\n<th>Question answered<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Raw visible occurrence<\/td>\n<td>Count each displayed source reference<\/td>\n<td>How many citation placements did the interface show?<\/td>\n<\/tr>\n<tr>\n<td>Response-level URL citation<\/td>\n<td>Count each normalized URL once per response<\/td>\n<td>How often did a specific address appear across answers?<\/td>\n<\/tr>\n<tr>\n<td>Response-level content citation<\/td>\n<td>Count each content asset once per response<\/td>\n<td>How many distinct pieces of evidence supported answers?<\/td>\n<\/tr>\n<tr>\n<td>Unique normalized URL<\/td>\n<td>Count each resolved, cleaned address once in the period<\/td>\n<td>How many physical web addresses were cited?<\/td>\n<\/tr>\n<tr>\n<td>Unique content asset<\/td>\n<td>Merge verified alternate representations and syndicated copies<\/td>\n<td>How many distinct documents or datasets supplied evidence?<\/td>\n<\/tr>\n<tr>\n<td>Unique host<\/td>\n<td>Count hosts such as <code>docs.example.com<\/code> separately<\/td>\n<td>Which web properties were surfaced?<\/td>\n<\/tr>\n<tr>\n<td>Unique registrable domain<\/td>\n<td>Collapse hosts using a public-suffix-aware rule<\/td>\n<td>How diverse was the root-domain source set?<\/td>\n<\/tr>\n<tr>\n<td>Verified publisher<\/td>\n<td>Group domains with confirmed common ownership<\/td>\n<td>How many independent publishing organizations appeared?<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Use <strong>response-level content citations<\/strong> when the question is \u201cHow many distinct sources supported the answers?\u201d Use response-level URL citations when measuring destinations users could visit. Use raw occurrences only for placement or interface-prominence analysis.<\/p>\n<p>Unique URLs, assets, and domains are portfolio metrics. They should not be added to response-level counts because they operate at different aggregation levels.<\/p>\n<h2>The three layers of citation-count accuracy<\/h2>\n<p><strong>Accurate AI citation tracking requires capture integrity, identity resolution, and denominator discipline. A failure in any one layer can distort the final rate even when the other two are correct.<\/strong><\/p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" style=\"max-width:100%;height:auto\" loading=\"lazy\"  src=\"https:\/\/maxaeo.ai\/blog\/wp-content\/uploads\/2026\/07\/1784037061690-4-61694-1.jpg\" alt=\"How to count AI citations accurately by mapping raw links to normalized URLs, content pages, and registrable domains\"><\/figure>\n<h3>1. Capture integrity<\/h3>\n<p>Capture what a user could actually see, along with enough context to reproduce the observation:<\/p>\n<ul>\n<li>Engine and surface<\/li>\n<li>Prompt and prompt version<\/li>\n<li>Run and response IDs<\/li>\n<li>Country, language, device class, and authentication state<\/li>\n<li>Model or mode when disclosed<\/li>\n<li>Source-card or citation-block ID<\/li>\n<li>Visible label and placement<\/li>\n<li>Raw destination<\/li>\n<li>Observation timestamp<\/li>\n<li>Screenshot or saved response evidence, where permitted<\/li>\n<\/ul>\n<p>A hidden anchor, preloaded source, duplicate mobile element, or navigation link is not automatically a visible citation. Count rendered source items according to a documented interface policy.<\/p>\n<h3>2. Identity resolution<\/h3>\n<p>A raw target must be mapped without erasing evidence:<\/p>\n<pre><code class=\"language-text\">Citation event\n  \u2192 final resolved destination\n  \u2192 normalized URL\n  \u2192 content asset\n  \u2192 host\n  \u2192 registrable domain\n  \u2192 verified publisher\n<\/code><\/pre>\n<p>Each level needs its own identifier. Never overwrite the original URL with a cleaned version.<\/p>\n<h3>3. Denominator discipline<\/h3>\n<p>Citation rates depend on which runs qualify for the denominator. A report must distinguish:<\/p>\n<ul>\n<li>Scheduled prompt runs<\/li>\n<li>Successfully completed responses<\/li>\n<li>Responses eligible to display citations<\/li>\n<li>Responses containing tracked citations<\/li>\n<li>Failed, refused, empty, or interrupted runs<\/li>\n<li>Source events that could not be resolved<\/li>\n<\/ul>\n<p>This prevents data-collection failures from making visibility appear stronger than it was.<\/p>\n<h2>How should URLs be normalized?<\/h2>\n<p><strong>Normalize URLs in a fixed, versioned order: preserve the raw target, resolve network behavior, apply safe syntax rules, test parameters, and then assign content and domain identities.<\/strong><\/p>\n<ol>\n<li><strong>Store the untouched target.<\/strong> Preserve the complete raw value in an access-controlled evidence ledger.<\/li>\n<li><strong>Unwrap outbound tracking routes.<\/strong> Extract the embedded destination from known search-engine or AI-interface wrappers.<\/li>\n<li><strong>Resolve redirects.<\/strong> Record each hop, response status, final URL, retrieval time, and any location-dependent result.<\/li>\n<li><strong>Lowercase the scheme and hostname.<\/strong> Do not lowercase paths; <code>\/Report<\/code> and <code>\/report<\/code> may identify different resources.<\/li>\n<li><strong>Remove default ports.<\/strong> For example, remove <code>:443<\/code> from a standard HTTPS URL.<\/li>\n<li><strong>Normalize equivalent encoding.<\/strong> Avoid transformations that could change reserved characters or application behavior.<\/li>\n<li><strong>Handle fragments by resource type.<\/strong> Ordinary HTML anchors usually identify a location within the same document; client-side routes may identify different content.<\/li>\n<li><strong>Classify every query parameter.<\/strong> Remove verified attribution parameters, retain content-changing parameters, and quarantine unknown cases.<\/li>\n<li><strong>Assign a normalized URL ID.<\/strong> This represents the resolved physical address before content-level merging.<\/li>\n<li><strong>Assign content and domain IDs.<\/strong> Use corroborating evidence rather than URL similarity alone.<\/li>\n<li><strong>Save the rule version.<\/strong> Reprocessing must reproduce the same result or explain why it changed.<\/li>\n<\/ol>\n<p>These boundaries are consistent with the syntax and equivalence principles in <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc3986#section-6.2\" target=\"_blank\" rel=\"noopener\">RFC 3986, Section 6.2<\/a>. RFC-compliant syntax normalization does not prove that two pages contain the same material; content identity requires separate evidence.<\/p>\n<h3>Which parameters are safe to remove?<\/h3>\n<p><strong>Remove a parameter from URL identity only after confirming that it changes attribution or presentation rather than the evidence-bearing content. Parameter names are clues, not proof.<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Parameter class<\/th>\n<th>Examples<\/th>\n<th>Conservative treatment<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Campaign attribution<\/td>\n<td><code>utm_source<\/code>, <code>utm_medium<\/code>, <code>utm_campaign<\/code><\/td>\n<td>Usually remove after an equivalence check<\/td>\n<\/tr>\n<tr>\n<td>Advertising click IDs<\/td>\n<td><code>gclid<\/code>, <code>fbclid<\/code>, <code>msclkid<\/code><\/td>\n<td>Usually remove; retain in raw evidence<\/td>\n<\/tr>\n<tr>\n<td>Publisher referral values<\/td>\n<td><code>ref<\/code>, <code>source<\/code>, <code>partner<\/code><\/td>\n<td>Test before removal<\/td>\n<\/tr>\n<tr>\n<td>Search and pagination state<\/td>\n<td><code>q<\/code>, <code>page<\/code>, <code>sort<\/code>, <code>filter<\/code><\/td>\n<td>Keep unless equivalence is demonstrated<\/td>\n<\/tr>\n<tr>\n<td>Content identifiers<\/td>\n<td><code>id<\/code>, <code>article<\/code>, <code>product<\/code>, <code>lang<\/code><\/td>\n<td>Keep<\/td>\n<\/tr>\n<tr>\n<td>Presentation controls<\/td>\n<td><code>print<\/code>, <code>output<\/code>, <code>download<\/code><\/td>\n<td>Compare content type, canonical, and main content<\/td>\n<\/tr>\n<tr>\n<td>Signed access values<\/td>\n<td><code>token<\/code>, <code>signature<\/code>, <code>expires<\/code><\/td>\n<td>Protect or redact in exports; verify identity separately<\/td>\n<\/tr>\n<tr>\n<td>Unknown parameters<\/td>\n<td>Any undocumented value<\/td>\n<td>Keep or quarantine until tested<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A practical equivalence test compares:<\/p>\n<ul>\n<li>Final status and redirect target<\/li>\n<li>Content type<\/li>\n<li>Declared canonical<\/li>\n<li>Page title and publication metadata<\/li>\n<li>Main-content fingerprint<\/li>\n<li>Material headings, tables, and outbound references<\/li>\n<\/ul>\n<p>Repeat the test for dynamic pages. One matching retrieval does not establish a permanent rule.<\/p>\n<p>Do not automatically sort query parameters when duplicate keys or parameter order may affect application behavior.<\/p>\n<h3>How should redirects be counted?<\/h3>\n<p><strong>Use the final destination for current URL and domain identity, but preserve the surfaced URL as historical evidence.<\/strong> This prevents a legacy URL and its destination from becoming two current sources while retaining proof that the AI system exposed an outdated address.<\/p>\n<p>If <code>oldbrand.com\/report<\/code> redirects to <code>newbrand.com\/research\/report<\/code>, store:<\/p>\n<ul>\n<li>Surfaced URL: <code>oldbrand.com\/report<\/code><\/li>\n<li>Raw surfaced host: <code>oldbrand.com<\/code><\/li>\n<li>Final normalized URL: <code>newbrand.com\/research\/report<\/code><\/li>\n<li>Final registrable domain: <code>newbrand.com<\/code><\/li>\n<li>Redirect chain and status codes<\/li>\n<li>Observation and resolution timestamps<\/li>\n<li>Ownership mapping effective at that time<\/li>\n<\/ul>\n<p>Google recommends permanent server-side redirects for moved URLs in its official <a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/301-redirects\" target=\"_blank\" rel=\"noopener\">redirect guidance<\/a>. Citation tracking should still resolve the chain independently because an AI answer may continue displaying the legacy target.<\/p>\n<p>During a domain change, report both the <strong>legacy-surface rate<\/strong> and final-domain citations. The <a href=\"https:\/\/maxaeo.ai\/blog\/site-migration-ai-citations\">maxaeo site-migration citation method<\/a> explains how to retain that historical continuity.<\/p>\n<p>Redirect loops, timeouts, blocked requests, and location-dependent destinations belong in a resolution-error table. They should not be assigned to a guessed final domain.<\/p>\n<h3>Should fragments be removed?<\/h3>\n<p>For ordinary HTML documents, a fragment such as <code>#method<\/code> usually identifies a section of the same page. Remove it from the normalized document URL while storing the fragment as locator metadata.<\/p>\n<p>Exceptions include:<\/p>\n<ul>\n<li>Hash-based application routing<\/li>\n<li>Embedded document viewers<\/li>\n<li>Media players where the fragment selects materially different content<\/li>\n<li>Interfaces that return different evidence-bearing content for different fragments<\/li>\n<\/ul>\n<p>For PDFs, <code>#page=12<\/code> usually points to a location inside the same file. Count one PDF asset while preserving the page locator. Do not merge a PDF with an HTML landing page solely because their titles match.<\/p>\n<h3>Are canonical tags enough to merge pages?<\/h3>\n<p><strong>No. A canonical declaration is supporting evidence, not an unquestionable content-identity key.<\/strong> It may be missing, stale, self-serving, or incorrectly implemented.<\/p>\n<p>Google documents canonical annotations as signals for consolidating duplicate URLs in <a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/consolidate-duplicate-urls\" target=\"_blank\" rel=\"noopener\">Search Central\u2019s canonicalization guidance<\/a>. That guidance describes Google Search behavior; it is not proof that every AI engine treats the URLs as one citation.<\/p>\n<p>A conservative content-merge decision uses at least two independent signals:<\/p>\n<ul>\n<li>Same final URL after redirects<\/li>\n<li>Matching main-content fingerprint<\/li>\n<li>Consistent canonical or alternate declarations<\/li>\n<li>Matching title, byline, publication date, and primary data<\/li>\n<li>Evidence that one route is an AMP, print, or language-equivalent representation<\/li>\n<li>Verified syndication attribution<\/li>\n<\/ul>\n<p>If evidence conflicts, retain separate asset IDs and send the pair to manual review. Store the decision reason and confidence so that a later correction can be replayed.<\/p>\n<h3>How should syndicated copies be counted?<\/h3>\n<p><strong>A syndicated copy is a separate physical URL and citing domain but may share a content asset ID with the original.<\/strong> This preserves distribution reach without treating republished material as independent research.<\/p>\n<p>For a cited copy on <code>partner.com<\/code>:<\/p>\n<ul>\n<li>Physical URL credit belongs to <code>partner.com<\/code>.<\/li>\n<li>Citing-domain credit belongs to <code>partner.com<\/code>.<\/li>\n<li>Content-origin credit may belong to the original publisher.<\/li>\n<li>The original and copy may share an asset ID if duplication is verified.<\/li>\n<\/ul>\n<p>Compare the main article body rather than the complete HTML. Navigation, advertising, introductions, and calls to action may differ even when the evidence-bearing content is the same.<\/p>\n<h3>Should subdomains count separately?<\/h3>\n<p><strong>Count subdomains separately as hosts and combine them only for registrable-domain reporting.<\/strong> <code>docs.example.com<\/code>, <code>blog.example.com<\/code>, and <code>www.example.com<\/code> are three properties but usually one registrable domain.<\/p>\n<p>Do not derive a root domain by keeping the final two labels. That fails for domains such as <code>company.co.uk<\/code> and for multi-tenant platforms. Use the maintained <a href=\"https:\/\/publicsuffix.org\/\" target=\"_blank\" rel=\"noopener\">Public Suffix List<\/a>, record its version, and document whether the private-domain section is included.<\/p>\n<p>Publisher grouping requires additional proof. Shared design, similar names, or cross-linking does not establish ownership. Record ownership sources and effective dates because acquisitions and divestitures can change publisher-level trends.<\/p>\n<h2>How should owned, earned, and syndicated citations be classified?<\/h2>\n<p><strong>Assign citation ownership from verified domain and content relationships instead of treating every brand-related URL as brand-owned visibility.<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Citation class<\/th>\n<th>Definition<\/th>\n<th>Example attribution<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Owned<\/td>\n<td>Final URL is on a verified brand-owned property<\/td>\n<td>Brand receives URL, domain, and publisher credit<\/td>\n<\/tr>\n<tr>\n<td>Earned<\/td>\n<td>Independent third-party page discusses or evaluates the brand<\/td>\n<td>Third party receives source credit; brand receives mention context<\/td>\n<\/tr>\n<tr>\n<td>Syndicated distribution<\/td>\n<td>Third-party URL republishes a brand-originated asset<\/td>\n<td>Third party receives URL\/domain credit; origin is stored separately<\/td>\n<\/tr>\n<tr>\n<td>Legacy surfaced<\/td>\n<td>AI answer displays an old URL that redirects<\/td>\n<td>Preserve old surfaced host; assign final identity separately<\/td>\n<\/tr>\n<tr>\n<td>Unresolved<\/td>\n<td>Source is visible but destination cannot be verified<\/td>\n<td>Count the event, but assign no URL or domain credit<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This classification prevents two common errors: claiming third-party reviews as owned citations and erasing the reach of syndicated distribution by collapsing everything to the original domain.<\/p>\n<h2>How should repeated citations within one answer count?<\/h2>\n<p><strong>Keep every visible placement as a raw occurrence, but count the same normalized URL or content asset once per response for reach metrics.<\/strong><\/p>\n<p>If one answer links to the same page three times:<\/p>\n<pre><code class=\"language-text\">Raw visible occurrences:          3\nResponse-level URL citations:     1\nResponse-level content citations: 1\nUnique URLs in the response:      1\nUnique domains in the response:   1\n<\/code><\/pre>\n<p>If an answer cites an original article and a verified syndicated copy, it may contain:<\/p>\n<pre><code class=\"language-text\">Raw visible occurrences:          2\nResponse-level URL citations:     2\nResponse-level content citations: 1\nUnique registrable domains:       2\n<\/code><\/pre>\n<p>If it cites two genuinely different pages on the same domain, it contains two response-level content citations and one domain.<\/p>\n<p>Store source position separately. Repetition and placement can measure interface prominence, but multiplying source counts confuses prominence with source diversity.<\/p>\n<h2>How do failed responses and repeated runs affect citation rates?<\/h2>\n<p><strong>Use separate denominators for completed responses and scheduled prompt runs. A single AI answer measures one observation, not the brand\u2019s expected visibility across future answers.<\/strong><\/p>\n<p>Suppose 100 runs were scheduled, 12 failed, and 44 of the 88 valid responses cited a tracked content asset:<\/p>\n<pre><code class=\"language-text\">Valid-response citation rate = 44 \/ 88  = 50%\nScheduled-run coverage        = 44 \/ 100 = 44%\nResponse completion rate      = 88 \/ 100 = 88%\n<\/code><\/pre>\n<p>All three results are correct, but they answer different questions.<\/p>\n<table>\n<thead>\n<tr>\n<th>Metric<\/th>\n<th>Formula<\/th>\n<th>Interpretation<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Valid-response citation rate<\/td>\n<td>Citing valid responses \u00f7 valid responses<\/td>\n<td>Citation behavior when an answer was produced<\/td>\n<\/tr>\n<tr>\n<td>Scheduled-run coverage<\/td>\n<td>Scheduled runs with a citation \u00f7 scheduled runs<\/td>\n<td>Realized visibility across the planned panel<\/td>\n<\/tr>\n<tr>\n<td>Completion rate<\/td>\n<td>Valid responses \u00f7 scheduled runs<\/td>\n<td>Reliability of data collection<\/td>\n<\/tr>\n<tr>\n<td>Source-resolution rate<\/td>\n<td>Resolved visible source events \u00f7 all visible source events<\/td>\n<td>Reliability of URL attribution<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Refusals, empty answers, timeouts, interrupted browsing, and tool failures should receive explicit statuses. Do not silently exclude them from every chart.<\/p>\n<h3>How many times should each prompt be run?<\/h3>\n<p>The answer depends on the claim:<\/p>\n<ul>\n<li><strong>One run<\/strong> supports a statement about that captured response only.<\/li>\n<li><strong>Repeated standardized runs<\/strong> estimate citation frequency under a defined prompt and market condition.<\/li>\n<li><strong>A fixed prompt panel repeated over time<\/strong> supports trend analysis.<\/li>\n<li><strong>A weighted prompt panel<\/strong> estimates business exposure only when the weights are documented and stable.<\/li>\n<\/ul>\n<p>Use fresh conversations when possible, preserve the same locale and surface, and report the number of eligible runs. When presenting a citation rate as an estimate, include the sample size and a confidence interval. Do not treat correlated regenerations inside one conversation as fully independent observations.<\/p>\n<p>Keep Google AI Overviews, AI Mode, ChatGPT, Perplexity, and other surfaces separate at collection. Cross-engine comparisons should use the same response-level identity rules and equivalent denominator definitions\u2014not raw interface occurrence totals.<\/p>\n<h2>A reproducible AI citation audit example<\/h2>\n<p><strong>The fixture below is a transparent synthetic test case, not customer performance data. It contains 18 visible source occurrences across six responses and exposes every identity decision needed to reproduce the totals.<\/strong><\/p>\n<p>The identity map contains eight normalized physical URLs:<\/p>\n<table>\n<thead>\n<tr>\n<th>URL ID<\/th>\n<th>Normalized physical URL<\/th>\n<th align=\"right\">Asset ID<\/th>\n<th>Registrable domain<\/th>\n<th>Identity decision<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>U1<\/td>\n<td><code>https:\/\/acme.io\/research\/ai-benchmark<\/code><\/td>\n<td align=\"right\">P1<\/td>\n<td><code>acme.io<\/code><\/td>\n<td>Canonical research page<\/td>\n<\/tr>\n<tr>\n<td>U2<\/td>\n<td><code>https:\/\/acme.io\/research\/ai-benchmark\/amp\/<\/code><\/td>\n<td align=\"right\">P1<\/td>\n<td><code>acme.io<\/code><\/td>\n<td>Verified alternate representation of P1<\/td>\n<\/tr>\n<tr>\n<td>U3<\/td>\n<td><code>https:\/\/partner.example\/insights\/ai-benchmark<\/code><\/td>\n<td align=\"right\">P1<\/td>\n<td><code>partner.example<\/code><\/td>\n<td>Verified syndicated copy of P1<\/td>\n<\/tr>\n<tr>\n<td>U4<\/td>\n<td><code>https:\/\/docs.acme.io\/guides\/monitoring<\/code><\/td>\n<td align=\"right\">P2<\/td>\n<td><code>acme.io<\/code><\/td>\n<td>Documentation page<\/td>\n<\/tr>\n<tr>\n<td>U5<\/td>\n<td><code>https:\/\/docs.acme.io\/guides\/monitoring\/print<\/code><\/td>\n<td align=\"right\">P2<\/td>\n<td><code>acme.io<\/code><\/td>\n<td>Verified print representation of P2<\/td>\n<\/tr>\n<tr>\n<td>U6<\/td>\n<td><code>https:\/\/acme.io\/reports\/ai-benchmark.pdf<\/code><\/td>\n<td align=\"right\">P3<\/td>\n<td><code>acme.io<\/code><\/td>\n<td>Distinct PDF asset<\/td>\n<\/tr>\n<tr>\n<td>U7<\/td>\n<td><code>https:\/\/reviewhub.example\/acme-review<\/code><\/td>\n<td align=\"right\">P4<\/td>\n<td><code>reviewhub.example<\/code><\/td>\n<td>Independent review<\/td>\n<\/tr>\n<tr>\n<td>U8<\/td>\n<td><code>https:\/\/reviewhub.example\/acme-pricing<\/code><\/td>\n<td align=\"right\">P5<\/td>\n<td><code>reviewhub.example<\/code><\/td>\n<td>Separate pricing page<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The six responses contain these visible events:<\/p>\n<table>\n<thead>\n<tr>\n<th>Response<\/th>\n<th>Raw visible source targets<\/th>\n<th>URL IDs after normalization<\/th>\n<th>Asset IDs<\/th>\n<th>Final domains<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>R1<\/td>\n<td><code>ai-benchmark?utm_source=chatgpt<\/code><br \/><code>ai-benchmark#method<\/code><br \/><code>docs...\/monitoring<\/code><\/td>\n<td>U1, U1, U4<\/td>\n<td>P1, P1, P2<\/td>\n<td><code>acme.io<\/code><\/td>\n<\/tr>\n<tr>\n<td>R2<\/td>\n<td><code>ai-benchmark<\/code><br \/><code>ai-benchmark\/amp\/<\/code><br \/><code>partner...\/ai-benchmark<\/code><\/td>\n<td>U1, U2, U3<\/td>\n<td>P1, P1, P1<\/td>\n<td><code>acme.io<\/code>, <code>partner.example<\/code><\/td>\n<\/tr>\n<tr>\n<td>R3<\/td>\n<td><code>monitoring?utm_campaign=q3<\/code><br \/><code>monitoring#setup<\/code><br \/><code>monitoring\/print<\/code><br \/><code>ai-benchmark.pdf<\/code><\/td>\n<td>U4, U4, U5, U6<\/td>\n<td>P2, P2, P2, P3<\/td>\n<td><code>acme.io<\/code><\/td>\n<\/tr>\n<tr>\n<td>R4<\/td>\n<td><code>oldacme.example\/benchmark<\/code> \u2192 U1<br \/><code>ai-benchmark?gclid=test<\/code><br \/><code>acme-review<\/code><\/td>\n<td>U1, U1, U7<\/td>\n<td>P1, P1, P4<\/td>\n<td><code>acme.io<\/code>, <code>reviewhub.example<\/code><\/td>\n<\/tr>\n<tr>\n<td>R5<\/td>\n<td><code>ai-benchmark.pdf?utm_source=ai<\/code><br \/><code>ai-benchmark.pdf#page=3<\/code><br \/><code>docs...\/monitoring<\/code><\/td>\n<td>U6, U6, U4<\/td>\n<td>P3, P3, P2<\/td>\n<td><code>acme.io<\/code><\/td>\n<\/tr>\n<tr>\n<td>R6<\/td>\n<td><code>partner...\/ai-benchmark<\/code><br \/><code>acme-pricing<\/code><\/td>\n<td>U3, U8<\/td>\n<td>P1, P5<\/td>\n<td><code>partner.example<\/code>, <code>reviewhub.example<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The resulting counts are:<\/p>\n<table>\n<thead>\n<tr>\n<th>Response<\/th>\n<th align=\"right\">Raw occurrences<\/th>\n<th align=\"right\">Distinct URL IDs<\/th>\n<th align=\"right\">Distinct asset IDs<\/th>\n<th align=\"right\">Distinct domains<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>R1<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">1<\/td>\n<\/tr>\n<tr>\n<td>R2<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">1<\/td>\n<td align=\"right\">2<\/td>\n<\/tr>\n<tr>\n<td>R3<\/td>\n<td align=\"right\">4<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">1<\/td>\n<\/tr>\n<tr>\n<td>R4<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<\/tr>\n<tr>\n<td>R5<\/td>\n<td align=\"right\">3<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">1<\/td>\n<\/tr>\n<tr>\n<td>R6<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<td align=\"right\">2<\/td>\n<\/tr>\n<tr>\n<td><strong>Response-level total<\/strong><\/td>\n<td align=\"right\"><strong>18<\/strong><\/td>\n<td align=\"right\"><strong>14<\/strong><\/td>\n<td align=\"right\"><strong>11<\/strong><\/td>\n<td align=\"right\"><strong>9<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Across the complete fixture:<\/p>\n<ul>\n<li>Raw visible occurrences: <strong>18<\/strong><\/li>\n<li>Response-level URL citations: <strong>14<\/strong><\/li>\n<li>Response-level content citations: <strong>11<\/strong><\/li>\n<li>Unique normalized URLs: <strong>8<\/strong><\/li>\n<li>Unique content assets: <strong>5<\/strong><\/li>\n<li>Unique registrable domains: <strong>3<\/strong><\/li>\n<\/ul>\n<p>Counting all 18 placements as response-level URL citations would overstate that metric by <strong>28.6%<\/strong>:<\/p>\n<pre><code class=\"language-text\">(18 \u2212 14) \/ 14 = 28.6%\n<\/code><\/pre>\n<p>Treating eight physical URLs as eight independent content assets would overstate unique content supply by <strong>60%<\/strong>:<\/p>\n<pre><code class=\"language-text\">(8 \u2212 5) \/ 5 = 60%\n<\/code><\/pre>\n<p>Even after URL-level deduplication, alternate representations and syndication would inflate response-level content citations by <strong>27.3%<\/strong>:<\/p>\n<pre><code class=\"language-text\">(14 \u2212 11) \/ 11 = 27.3%\n<\/code><\/pre>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" style=\"max-width:100%;height:auto\" loading=\"lazy\"  src=\"https:\/\/maxaeo.ai\/blog\/wp-content\/uploads\/2026\/07\/1784037061690-4-61694-2.jpg\" alt=\"Worked audit showing 18 raw AI citation links normalized into 14 response-URL events, 11 response-page events, 8 URLs, 5 pages, and 3 domains\"><\/figure>\n<p>This example isolates three different sources of inflation: repeated presentation, multiple URL representations, and duplicated content. A single \u201ctotal citations\u201d field cannot reveal which one changed.<\/p>\n<h2>What data should an AI citation tracker store?<\/h2>\n<p><strong>A trustworthy tracker needs an immutable evidence ledger plus separate resolution, identity, and aggregation tables.<\/strong><\/p>\n<h3>Evidence ledger<\/h3>\n<p>Store one row per visible source occurrence:<\/p>\n<pre><code class=\"language-text\">citation_event_id\nengine\nsurface\nprompt_id\nprompt_version\nrun_id\nresponse_id\nsource_item_id\nvisible_label\nplacement\nposition\nraw_target\nobserved_at\ncountry\nlanguage\ndevice_class\ncapture_status\n<\/code><\/pre>\n<h3>Resolution ledger<\/h3>\n<p>Store network and URL-processing evidence separately:<\/p>\n<pre><code class=\"language-text\">raw_target\nredirect_hops\nfinal_url\nfinal_status\ncontent_type\ncanonical_target\nresolution_status\nresolved_at\nnormalization_rule_version\n<\/code><\/pre>\n<h3>Identity ledger<\/h3>\n<p>Map resolved URLs without deleting lower-level identities:<\/p>\n<pre><code class=\"language-text\">normalized_url_id\nnormalized_url\ncontent_asset_id\nasset_match_reason\nasset_match_confidence\nhost\nregistrable_domain\npublisher_id\nownership_class\nownership_effective_date\n<\/code><\/pre>\n<h3>Metric ledger<\/h3>\n<p>Aggregate only from documented identity keys:<\/p>\n<pre><code class=\"language-text\">raw_occurrences       = count(citation_event_id)\nresponse_url_events   = count_distinct(response_id, normalized_url_id)\nresponse_asset_events = count_distinct(response_id, content_asset_id)\nunique_urls           = count_distinct(normalized_url_id)\nunique_assets         = count_distinct(content_asset_id)\nunique_domains        = count_distinct(registrable_domain)\n<\/code><\/pre>\n<p>Unknown identities should remain <code>unresolved<\/code>, not become empty values that disappear from reports. Show unresolved counts and rates next to the main metrics.<\/p>\n<h2>Which metrics belong on the dashboard?<\/h2>\n<p><strong>Lead with citation coverage and response-level content citations. Use raw occurrences, URLs, domains, and error rates as diagnostic layers.<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Metric<\/th>\n<th>Recommended definition<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Valid-response citation rate<\/td>\n<td>Valid responses with at least one tracked citation \u00f7 valid responses<\/td>\n<\/tr>\n<tr>\n<td>Scheduled-run coverage<\/td>\n<td>Scheduled runs with at least one tracked citation \u00f7 scheduled runs<\/td>\n<\/tr>\n<tr>\n<td>Response-level content citations<\/td>\n<td>Distinct <code>(response ID, content asset ID)<\/code> combinations<\/td>\n<\/tr>\n<tr>\n<td>Response-level URL citations<\/td>\n<td>Distinct <code>(response ID, normalized URL ID)<\/code> combinations<\/td>\n<\/tr>\n<tr>\n<td>Unique cited assets<\/td>\n<td>Distinct content asset IDs in the period<\/td>\n<\/tr>\n<tr>\n<td>Unique citing domains<\/td>\n<td>Distinct final registrable domains<\/td>\n<\/tr>\n<tr>\n<td>Legacy-surface rate<\/td>\n<td>Events displaying a URL that redirects to a different domain \u00f7 resolved events<\/td>\n<\/tr>\n<tr>\n<td>Duplicate-representation rate<\/td>\n<td>Normalized URLs sharing an asset ID \u00f7 normalized URLs<\/td>\n<\/tr>\n<tr>\n<td>Resolution success rate<\/td>\n<td>Resolved source events \u00f7 visible source events<\/td>\n<\/tr>\n<tr>\n<td>Completion rate<\/td>\n<td>Valid responses \u00f7 scheduled runs<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Keep AI share of voice separate. Share of voice compares visibility against a competitive set; citation counts measure source attribution. Sentiment, factual accuracy, recommendation position, and brand inclusion also need separate metrics.<\/p>\n<p>When comparing software, verify that exports contain raw targets, response IDs, final URLs, content identities, run outcomes, timestamps, and rule versions. The same test applies to the products covered in maxaeo\u2019s review of <a href=\"https:\/\/maxaeo.ai\/blog\/best-google-ai-overviews-ai-mode-tracking-tools-2026-which-tools-actually-see-inside-googles-ai-answers\">Google AI Overviews and AI Mode tracking tools<\/a>.<\/p>\n<h2>How can teams validate the counting pipeline?<\/h2>\n<p><strong>A citation pipeline is auditable only when fixed raw evidence produces predictable identities and every aggregate can be reconciled to its source events.<\/strong><\/p>\n<p>Use this release checklist:<\/p>\n<ol>\n<li>Create golden test cases for repeated cards, tracking parameters, fragments, redirect chains, subdomains, PDFs, print routes, syndication, pagination, signed URLs, and failed resolutions.<\/li>\n<li>Define the expected normalized URL, asset ID, domain, ownership class, and decision reason for every case.<\/li>\n<li>Replay the fixtures whenever code, parameter rules, ownership data, or the Public Suffix List changes.<\/li>\n<li>Manually review high-volume URLs and low-confidence content matches.<\/li>\n<li>Re-fetch redirects and canonical evidence after migrations or material traffic changes.<\/li>\n<li>Reconcile dashboard totals with the evidence ledger.<\/li>\n<li>Compare old and new rule versions before restating historical trends.<\/li>\n<li>Track unresolved sources and failed runs instead of deleting them.<\/li>\n<li>Sample source cards against screenshots to detect hidden or duplicated interface elements.<\/li>\n<li>Require every content merge or publisher grouping to retain supporting evidence.<\/li>\n<\/ol>\n<p>For operational follow-through, maxaeo\u2019s <a href=\"https:\/\/maxaeo.ai\/blog\/geo-citation-tracking\">GEO citation tracking workflow<\/a> connects citation identities to redirect, canonical, content, and ownership fixes.<\/p>\n<h2>Frequently asked questions<\/h2>\n<h3>Should the same URL count every time an AI answer links to it?<\/h3>\n<p>Preserve every visible appearance as a raw occurrence, but count the same normalized URL once per response for reach metrics. If it appears in ten separate responses, it contributes ten response-level URL citations and one unique URL for the reporting period.<\/p>\n<h3>Is a canonical tag enough to merge two cited URLs?<\/h3>\n<p>No. A canonical tag is supporting evidence, not proof of identical content. Confirm the redirect destination, main-content similarity, title, byline, publication data, content type, and alternate-format relationship before assigning one content asset ID.<\/p>\n<h3>How should citations to PDFs be counted?<\/h3>\n<p>Count a PDF as its own normalized URL and usually as a separate content asset. Preserve page fragments as locator metadata. Merge the PDF with an HTML route only when the HTML page is demonstrably a wrapper or alternate representation and the reporting policy defines them as one asset.<\/p>\n<h3>Do subdomains count as separate websites?<\/h3>\n<p>Count them separately as hosts and together only at the registrable-domain level. <code>docs.example.com<\/code> and <code>blog.example.com<\/code> are two web properties under <code>example.com<\/code>. Use a public-suffix-aware parser rather than keeping the final two domain labels.<\/p>\n<h3>How should AI citations be compared across engines?<\/h3>\n<p>Use one identity model while preserving engine-specific capture fields. Standardize the prompt panel, market, language, run status, and denominator. Compare response-level URL or content citations\u2014not raw placement counts, which depend on interface design.<\/p>\n<h3>Is a brand mention an AI citation?<\/h3>\n<p>No. A brand mention without an attached source reference is a mention. A source link to a brand-owned or brand-related page is a citation even when the brand name does not appear in the visible anchor text. Track mentions, recommendations, and citations separately.<\/p>\n<h3>Should failed AI responses be excluded?<\/h3>\n<p>Exclude failed runs from the valid-response citation-rate denominator, but include them in scheduled-run coverage and completion-rate reporting. Otherwise, a period with more collection failures can appear artificially successful.<\/p>\n<h3>Is citation count the same as GEO performance?<\/h3>\n<p>No. Generative engine optimization also measures mention rate, recommendation frequency, answer position, source quality, sentiment, factual accuracy, competitive inclusion, and downstream traffic. Citation count explains source visibility; it does not prove positive treatment or business impact.<\/p>\n<h2>Count identities before interpreting trends<\/h2>\n<p><strong>Accurate AI citation counting is an identity-resolution problem, not a link-counter problem.<\/strong> Preserve visible evidence, resolve destinations, distinguish URLs from content assets, deduplicate within responses, and disclose every denominator.<\/p>\n<p>Once those rules are versioned, a rising count can be separated into genuine source growth, broader domain diversity, repeated interface placement, legacy redirects, or duplicate representations. That produces a smaller number than raw counting\u2014but one SEO, PR, and analytics teams can reproduce and defend.<\/p>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"Article\",\n      \"headline\": \"How to Count AI Citations Accurately\",\n      \"description\": \"Learn how to count AI citations accurately with response-level deduplication, URL normalization, redirect resolution, content identity, and honest denominators.\",\n      \"inLanguage\": \"en\",\n      \"keywords\": [\n        \"how to count AI citations accurately\",\n        \"AI citation tracking\",\n        \"AI citation deduplication\",\n        \"AI search monitoring\",\n        \"GEO citation tracking\"\n      ],\n      \"author\": {\n        \"@type\": \"Organization\",\n        \"name\": \"maxaeo\"\n      },\n      \"publisher\": {\n        \"@type\": \"Organization\",\n        \"name\": \"maxaeo\"\n      }\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Should the same URL count every time an AI answer links to it?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Preserve every visible appearance as a raw occurrence, but count the same normalized URL once per response for reach metrics. Across separate responses, it may count once in each response.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is a canonical tag enough to merge two cited URLs?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. Treat a canonical tag as supporting evidence and confirm redirects, main-content similarity, metadata, content type, and the alternate-format relationship before merging URLs into one content asset.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How should citations to PDFs be counted?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Count a PDF as its own normalized URL and usually as a separate content asset. Preserve page fragments as locator metadata and merge it with HTML only when they are verified alternate representations.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Do subdomains count as separate websites?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Count subdomains separately at the host level and combine them only for registrable-domain reporting using a public-suffix-aware parser.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How should AI citations be compared across engines?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Use the same URL and content identity rules, standardized prompt conditions, and equivalent denominators. Compare response-level citations rather than raw placement totals.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is a brand mention an AI citation?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. A brand mention without an attached source reference is a mention. Track mentions, recommendations, and citations as separate observations.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Should failed AI responses be excluded?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Exclude failed runs from the valid-response citation-rate denominator, but include them in scheduled-run coverage and completion-rate reporting.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Is citation count the same as GEO performance?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. GEO performance also includes mention rate, recommendation frequency, answer position, sentiment, factual accuracy, competitive inclusion, and downstream traffic.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to count AI citations accurately with response-level deduplication, URL normalization, redirect resolution, content identity, and honest denominators.<\/p>\n","protected":false},"author":1,"featured_media":1299,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1301","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/posts\/1301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/comments?post=1301"}],"version-history":[{"count":0,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/posts\/1301\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/media\/1299"}],"wp:attachment":[{"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/media?parent=1301"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/categories?post=1301"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maxaeo.ai\/blog\/wp-json\/wp\/v2\/tags?post=1301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}