Open methodology · v1.0

Citation URL normalization for AI-answer evidence.

A conservative protocol for grouping tracking variants without overwriting raw observations, inventing publisher canonicals, or inflating citation counts.

Boundary: a normalized comparison key is not a publisher-declared canonical. Network redirects, content equivalence, source quality, and claim support require a separate dated review.

Preserve three different records

AI-answer exports and citation cards can represent the same page with analytics parameters, fragments, parameter-order changes, or a trailing slash. Counting every string as a unique source can distort citation totals and publisher concentration. The remedy is not to discard the original URL.

Observed URLThe exact string shown in the dated answer capture or export. This is the raw evidence.
Comparison keyA conservative, versioned local transformation used for grouping and duplicate checks.
Verified destinationThe redirect destination and declared canonical found through a separate network review.

Keep all three fields. Never replace the observed URL with the comparison key. A verified destination is a later finding that can change when a publisher updates or redirects a page.

Conservative normalization sequence

  1. Parse only absolute HTTP(S) URLs. Keep invalid rows with an error state instead of silently removing them from the denominator.
  2. Lowercase the hostname. Preserve path and query casing because a server may treat them as meaningful.
  3. Remove the fragment. Fragments are not sent in the HTTP request, but the raw observation still preserves the section a user saw.
  4. Remove a documented analytics allowlist. A practical start is utm_*, gclid, dclid, fbclid, msclkid, mc_cid, mc_eid, and common _hs* fields.
  5. Retain unknown and content-bearing parameters. Fields such as id, page, edition, lang, version, or query can change the content.
  6. Sort retained parameters. Sort by key and value while preserving repeated entries.
  7. Handle trailing slashes as a configurable rule. Some servers distinguish /report from /report/.
  8. Do not infer schemes, redirects, or canonicals. Do not silently force HTTPS, strip www, merge subdomains, decode paths, or remove extensions.

Synthetic example

The examples below use reserved placeholder domains and are not observed AI citations.

Observed URLComparison keyLogged transformation
https://docs.example.org/guide?utm_source=email#evidencehttps://docs.example.org/guideAnalytics parameter and fragment removed
https://docs.example.org/guide?utm_source=socialhttps://docs.example.org/guideAnalytics parameter removed
https://research.example.net/report/?gclid=examplehttps://research.example.net/reportClick ID and trailing slash removed
https://updates.example.com/story?edition=morning&utm_campaign=testhttps://updates.example.com/story?edition=morningContent parameter retained; analytics parameter removed

The first two rows share one comparison key. They remain two observations in the ledger.

Minimum audit ledger

FieldPurpose
observation_idStable ID for the dated answer observation
prompt_id and prompt_versionConnect the citation to a frozen prompt set
answer_system and run_timestampRecord the observable product surface and collection time
observed_urlPreserve the exact evidence string
normalization_policy_versionMake transformations reproducible across reruns
normalized_key and publisher_hostnameSupport duplicate and concentration checks
transformationsList every rule applied to the row
verification_status, verified_final_url, publisher_canonicalKeep local normalization separate from later network verification

Count without collapsing meaning

Report observations, unique URL keys, and unique publisher hostnames as separate measures. Do not call all three “citations.” A prompt set can cite one page across repeated runs, several pages from one publisher, or several publishers.

top_publisher_share = top_publisher_observations / all_valid_observations

Always state the observation count, prompt-set version, answer systems, markets, and collection window. Publisher share describes only the analyzed sample. It is not market share, source quality, ranking strength, or proof of influence.

Verification after normalization

  1. Open the observed URL in an authorized, isolated context.
  2. Record the HTTP result, redirect chain, and final URL with a timestamp.
  3. Inspect the publisher-declared canonical without overwriting the observed value.
  4. Compare page content before merging keys created by a risky transformation.
  5. Classify the page's source role: definition, evidence, comparison, implementation, or validation.
  6. Review whether the page supports the associated answer claim.

A timeout, challenge page, authentication wall, or regional restriction is not proof that a URL is invalid. Record it as an unresolved verification state.

Implementation test set

Test hostname casing while preserving path casing; fragments; one and multiple analytics fields; retained content parameters; repeated query keys; parameter order; root and non-root trailing slashes; Unicode and percent-encoded paths; invalid and relative inputs; referral-rule behavior; and unchanged URLs. Label every fixture as synthetic.

Apply the protocol with the browser-based AI citation URL normalizeror review the wider evidence methodology from Corank.