AI-search measurement can fail before a prompt is ever sampled.
If a company appears online under several names, domains, categories, addresses, product labels, or descriptions, an answer engine may treat those records as different entities. A monitoring system can make the same mistake. The result is a mix of false negatives, missed citations, duplicate counts, and explanations nobody can reproduce.
An entity consistency ledger is a practical control for this problem. It is not a giant knowledge graph. It is a versioned record of the public facts that identify a company, product, or person, plus the evidence showing where each fact was observed.
This guide describes a schema, collection workflow, conflict policy, and QA process for building one.
What the ledger should answer
For every monitored entity, an analyst should be able to answer:
- What is the canonical name?
- Which aliases are legitimate?
- Which domain and URLs are authoritative?
- Which products belong to the entity?
- Which categories are claimed publicly?
- Which locations and contact details are current?
- Where was each value observed?
- When was it last verified?
- Is a difference an acceptable variant or a real conflict?
- Who owns the correction?
If the system cannot answer those questions, entity matching becomes guesswork.
Preserve observations before normalizing them
The most important design rule is to keep raw observations separate from canonical values.
Suppose four profiles contain these names:
- Corank
- Corank AI
- CoreRank.ai
- Remap
A destructive cleanup that rewrites every value to "Corank" hides useful history. Some values may be valid aliases, one may be an old brand, and one may be an error.
Store both layers:
- Observed value — the exact text found on the source.
- Canonical interpretation — the normalized value chosen under an explicit rule.
That gives you an audit trail and makes future corrections possible.
A minimal data model
A compact implementation can use four tables or collections.
1. Entities
| Field | Purpose |
|---|---|
| entity_id | Stable internal identifier |
| entity_type | Organization, product, person, location |
| canonical_name | Approved display name |
| canonical_domain | Primary domain |
| status | Active, legacy, acquired, retired |
| owner | Person or team responsible for accuracy |
| valid_from | Start of this entity version |
| valid_to | End of this entity version, if closed |
2. Aliases
| Field | Purpose |
|---|---|
| entity_id | Parent entity |
| alias | Observed or approved alternate name |
| alias_type | Brand, legal, product, abbreviation, legacy, misspelling |
| match_policy | Exact, case-insensitive, token, manual-only |
| valid_from | When the alias became valid |
| valid_to | When it stopped being valid |
| evidence_url | Source supporting the alias |
3. Claims
| Field | Purpose |
|---|---|
| claim_id | Stable claim identifier |
| entity_id | Entity described |
| field | Name, category, address, phone, pricing, capability, etc. |
| canonical_value | Approved interpretation |
| confidence | Confirmed, probable, disputed, unknown |
| effective_date | Date the claim became true |
| expiry_date | Optional review or sunset date |
| owner | Team responsible for the claim |
4. Observations
| Field | Purpose |
|---|---|
| observation_id | Stable record |
| claim_id | Claim being evaluated |
| source_url_raw | Exact retrieved URL |
| source_url_canonical | Normalized URL |
| observed_value | Exact public value |
| retrieved_at | Collection timestamp |
| source_type | Website, directory, social, review, repository, press |
| classification | Match, acceptable variant, stale, conflicting, unknown |
| evidence | Snapshot, response excerpt, or hash |
| reviewer | Human or rule that classified it |
A relational database is helpful but not required. A spreadsheet can work for a small inventory if identifiers, evidence URLs, and dates are treated as real fields rather than comments.
Example record
{
"entity_id": "org_corank",
"canonical_name": "Corank",
"canonical_domain": "corank.ai",
"alias": {
"value": "Remap",
"type": "legacy_brand",
"valid_to": "2026-07-01"
},
"observation": {
"source_url_raw": "https://example.com/company/remap",
"source_url_canonical": "https://example.com/company/remap",
"observed_value": "Remap",
"retrieved_at": "2026-08-03T10:00:00Z",
"classification": "stale"
},
"owner": "brand-operations"
}
The record does not pretend the old name was never used. It explains why the value is now stale.
Step 1: inventory identity-bearing claims
Start with facts that help people and systems decide whether two records describe the same entity:
- canonical name
- legal name
- former names
- domain
- product names
- logo
- primary category
- short description
- headquarters and service locations
- phone and public email
- founders or key people
- social profiles
- repository and documentation URLs
Do not begin with every marketing statement. Identity-bearing facts have the highest matching value and are usually easier to verify.
Step 2: declare canonical values and sources
A canonical value needs an owner and a source of truth.
For example:
- product capabilities may be owned by product documentation
- address and phone may be owned by operations
- legal name may be owned by corporate records
- category and positioning may be owned by marketing
- repository names may be owned by engineering
The source of truth is not necessarily the highest-authority third-party page. It is the record authorized to define the value. Independent sources then corroborate it.
Step 3: collect public observations
Collect from legitimate surfaces where entity facts are likely to appear:
- the website and structured data
- documentation and changelogs
- social profiles
- business and software directories
- review platforms
- public repositories
- app marketplaces
- press coverage
- association listings
- partner pages
- conference and podcast pages
Respect access controls and platform rules. The purpose is to audit public facts, not to bypass sign-in or scrape private data.
Record the exact retrieved URL, not only the domain. Preserve redirects and tracking parameters before canonicalization so transformations remain inspectable.
Step 4: normalize conservatively
Normalization should remove technical noise without erasing semantic differences.
Usually safe:
- lowercasing domains
- removing default ports
- normalizing protocol where redirects prove equivalence
- sorting or removing known tracking parameters
- resolving canonical URLs
- standardizing whitespace
- case-insensitive comparison for approved fields
Potentially unsafe:
- collapsing two product names because they share tokens
- treating a former brand as a current alias forever
- merging locations with similar street names
- assuming two social handles belong to the same company
- replacing a legal name with a marketing name
- stripping locale or path segments that change meaning
Every nontrivial transformation should be named and testable.
Step 5: classify differences
Not every mismatch is an error. Use explicit classes:
Match
The observed value is equivalent to the canonical value under an approved rule.
Acceptable variant
The value is legitimate in context, such as an abbreviation or localized form.
Stale
The value was once valid but should now be updated.
Conflicting
The source asserts a different current fact.
Unknown
The system lacks enough evidence to decide.
This classification prevents teams from wasting time "fixing" valid variants while missing true contradictions.
Step 6: prioritize by identity risk
Fixing every mismatch at once is rarely practical. Score conflicts by:
- Reach — how visible is the source?
- Relevance — does it influence important prompts or audiences?
- Identity weight — name, domain, and product ownership matter more than punctuation.
- Recency — is the record still active?
- Contradiction severity — could the value cause a wrong recommendation or lost attribution?
- Correction control — can the team edit it directly, request an update, or only monitor it?
A stale phone number on a prominent profile can be more urgent than a minor description difference across ten low-use pages.
Step 7: connect the ledger to AI-search measurement
An entity ledger should influence both collection and reporting.
During detection
Use approved aliases and validity windows when identifying mentions. A legacy brand should not count as a current positive mention unless the analysis explicitly asks for historical visibility.
During citation normalization
Attach cited URLs to the entity and claim they support. Preserve raw URLs alongside canonical records.
During scoring
Report uncertain matches separately. Do not silently convert low-confidence entity matches into visibility wins or losses.
During incident review
When a mention disappears, check whether the brand actually lost visibility or whether an alias, URL, or category rule changed.
During remediation
Create tasks against the conflicting source, canonical owner, and verification test. A recommendation without an owner or recheck condition is not operational.
QA rules worth automating
A useful first ruleset can flag:
- one active entity with multiple canonical domains
- one domain assigned to multiple active entities
- aliases with overlapping validity windows and conflicting meanings
- public profiles using a legacy name after its validity window
- different current phone or address values
- product pages that attribute a product to the wrong parent
- canonical URLs that redirect to a different entity
- observations without timestamps
- claims without owners
- normalization transformations without a rule identifier
These checks should create review queues, not automatically overwrite evidence.
Measure ledger quality
Track operational metrics rather than a vague "consistency score":
- percentage of identity claims with owners
- percentage with authoritative evidence
- unresolved conflicts by severity
- stale observations past their review date
- sources with failed retrieval
- uncertain entity matches in AI-answer samples
- time from conflict discovery to verified correction
- regression rate after correction
A single percentage can hide the exact conflict that causes attribution failure.
Common failure modes
Copying one profile everywhere
Consistency is not the same as duplication. Each platform should have content appropriate to its audience while core identity facts remain aligned.
Treating all backlinks as identity evidence
A link can exist without supporting any claim. Evaluate the surrounding page, not only the href.
Overwriting legacy history
Former names and domains are useful when bounded by dates. Deleting them can make historical citations impossible to interpret.
Trusting structured data alone
Schema helps machines parse information, but visible page content and public profiles still need to agree.
Using normalization to hide conflicts
If two values differ in meaning, a fuzzy-match threshold should not force them together.
Scoring failed collection as inconsistency
A timeout is not a conflicting fact. Collection health must be evaluated before entity quality.
A practical rollout
Week 1: define the entity, claim, alias, and observation schemas.
Week 2: inventory high-impact identity claims and assign owners.
Week 3: collect the website, documentation, social, directory, and repository surfaces.
Week 4: classify conflicts and correct the highest-risk records.
Then version the ledger, rerun the checks, and monitor new observations continuously.
The system becomes valuable when another analyst can reproduce why two records were merged, why a value was marked stale, and how a correction was verified.
Closing principle
Entity consistency is not cosmetic brand hygiene. It is part of the measurement layer.
If the identity model is wrong, citation attribution, competitor comparison, and visibility scoring can all be wrong in ways that look statistically convincing.
Disclosure: I work on Corank, where we are building auditable AI-search measurement and hands-on remediation. You can see the approach at https://corank.ai.
The goal is not to make every page say the same thing. It is to make every important claim traceable to a clear entity, a responsible owner, and verifiable public evidence.
Top comments (0)