SEO and AI Search
Search visibility is a chain. A correct tag, green build, passing test, saved
dashboard rule, accepted submission, or crawler 200 proves only its own
layer. For each material symptom or URL class in scope, find the first broken
owner in its real chain, fix that owner rather than downstream symptoms, then
prove the result at the surface that carries the user outcome.
Start with the requested outcome
Establish before broad investigation:
- the exact domain, host, URL class, audience, and search surface in scope;
- whether the task is diagnosis, implementation, release, or measurement;
- the intended URL and content contract, including any migration or retirement;
- which repository, dataset, deployment, edge, and external property currently
own that contract.
Resolve names from repository and provider configuration, not from prose.
Before broader inspection, make one direct check that the current workspace or
connected property owns the target. If it does not, locate or request the
correct one instead of mining the wrong workspace. When local code is used to
explain public behaviour, establish how that revision relates to origin and
the deployed release.
Trace one contract end to end
Follow only the layers relevant to the symptom:
source fact or URL owner -> generated output or data -> committed revision -> deployed release (code + data) -> CDN/WAF/edge cache -> crawler access -> engine record -> measured outcome
Attribute every observed public response to the layer that actually produced
it before changing any layer. Zone redirect rules, WAF and bot controls,
managed robots files, platform URL normalisation, and edge caches can act
before your application code — and your code's own tests can never prove that
phase ordering. When two layers disagree, report both states instead of
choosing the more convenient one. Do not audit every layer by default; stop
expanding when evidence identifies the owner and the smallest coherent fix.
Work the root cause
- Reproduce the exact symptom on the exact host, path, protocol, method, and
relevant user agent or account property.
- If this symptom was declared fixed before, first find the prior fix and the
evidence that closed it. That shows what was proved and which later surface
now contradicts it; do not repeat the same fix without explaining the gap.
- Inspect current source, generated artefacts, runtime data, deployed
revision, edge response, and dashboard state only as needed to locate the
first divergence.
- Find the existing owner of the URL, entity fact, indexability decision, or
crawler control. Fix that owner instead of adding another override, then
check the consumers affected by that decision.
- Prove the change at the lowest seam that contains the risk, then at the
public seam below.
- Report each state separately. Never turn eligibility or submission into a
claim of indexing, ranking, citation, traffic, or conversion.
The public seam gates "done"
Before calling any public-facing change complete, fetch the exact queryless
canonical URL on the production host — GET, plus HEAD when redirects or caches
are involved — and tie the response to the deployed release (and data
generation) when the platform exposes one. None of the following count as that
proof: a local build, a preview or platform-default host, a feature branch, a
cache-busted or query-variant URL, a green test suite, a merged commit, an
accepted submission, or a dashboard rule that reports "saved". Each proves
only its own plane; say which plane you proved.
Non-negotiable judgement rules
- Where surfaces refer to the same URL identity, redirects, canonicals,
internal links, sitemaps, alternate hosts or encodings, structured data, and
notifications should agree. The chosen host or slash policy is
project-specific.
- Canonical identity is a semantic decision. Current content or result-set
equality alone does not prove that two routes are permanent duplicates.
- A redirect is right only when its target is a true equivalent that is itself
indexable and relevant. Transport success (
301 -> 200) with a wrong,
noindex, or generic target is content loss, not migration.
- Missing, ambiguous, rejected, and not-evaluated data are not positive facts.
Do not replace them with plausible employment terms, locations, dates,
prices, categories, ratings, profiles, or business details — visibly absent
beats silently invented.
- Normal crawlable HTML, links, and public content are primary. Crawler-only
files, Markdown mirrors, bot routes, or schema do not repair a weak, false,
or client-side-only page.
- A deterministic tool or test can be consistently wrong, and a check that
re-reads the same generated literal or fixture is not independent evidence.
Treat tool output as an observation whose assumptions must match the
contract.
- Do not assign a composite SEO, GEO, citability, authority, or platform score
unless the user supplied a calibrated model. Rank findings by demonstrated
blockage, breadth, user impact, and fix leverage.
- A technical repair proves technical eligibility, not SEO success. Traffic
and ranking changes are evidence to investigate, not proof of one cause.
Route to the smallest relevant reference
- For hosts, DNS/TLS, redirects, canonicals, robots, rendering, IDN and
encoded URLs, sitemaps, migrations, generated output, CDN/WAF/edge
behaviour, or caching, read
references/public-delivery.md.
- For helpful content, internal discovery, entity truth, structured data,
local business, portfolio evidence, images, or backlinks, read
references/content-and-entities.md.
- For programmatic routes, jobs, changing inventories, semantic defaults,
pagination, lifecycle, error pages, or notification feeds, read
references/dynamic-pages.md.
- For Google AI features, ChatGPT search, Claude, Perplexity, bot categories,
robots.txt policy, WAF and bot-management controls, IndexNow, or
llms.txt, read
references/platform-controls.md.
- For Search Console, analytics, ranking loss, release identity, fixtures,
dashboards, or a claim that work is fixed or complete, read
references/measurement-and-proof.md.
Read more than one reference only when the task crosses those boundaries.
Authority and finish
An audit or diagnosis does not authorise code changes, deployment, Search
Console submission, provider settings, profile edits, outreach, or
publication. An implementation request authorises the smallest coherent
in-scope change and its proportionate validation. The indexability of a route
class, a canonical consolidation, a retirement status, and a crawler policy
are each product decisions: never change one as a side effect of another
task, and stop and ask when the missing decision is the product owner's to
make. Preserve unrelated repository and external state; report material
incidental findings instead of fixing them unasked.
Finish with:
- the root causes and owning layers;
- what changed, including intentional URL or content-contract changes;
- evidence for each local, deployed, public, dashboard, and search-engine
claim you actually make;
- any material gap that prevents a stronger claim.
Do not call the work fixed while the relevant public, cached, or external
state still contradicts it — and if you cannot observe that state, say so
instead of assuming it.
1---2name: geo-seo-toolkit3description: Use whenever search or AI-search visibility of a real site is at stake: diagnosing indexing, ranking, crawling, or citation problems; implementing or reviewing canonicals, redirects, robots and crawler policy, sitemaps, rendered HTML, structured data, or programmatic URL sets; launching, migrating, or retiring public pages or domains; and verifying that any such change is actually live and correct on the public surface. Covers Search Console and analytics diagnosis, JobPosting and other schema, local business and portfolio SEO, CDN/WAF/cache and AI-crawler access, and re-checking work previously declared fixed. Do not use for generic marketing copy, sales CRM, or outreach without a real site and evidence.4---56# SEO and AI Search78Search visibility is a chain. A correct tag, green build, passing test, saved9dashboard rule, accepted submission, or crawler `200` proves only its own10layer. For each material symptom or URL class in scope, find the first broken11owner in its real chain, fix that owner rather than downstream symptoms, then12prove the result at the surface that carries the user outcome.1314## Start with the requested outcome1516Establish before broad investigation:1718- the exact domain, host, URL class, audience, and search surface in scope;19- whether the task is diagnosis, implementation, release, or measurement;20- the intended URL and content contract, including any migration or retirement;21- which repository, dataset, deployment, edge, and external property currently22 own that contract.2324Resolve names from repository and provider configuration, not from prose.25Before broader inspection, make one direct check that the current workspace or26connected property owns the target. If it does not, locate or request the27correct one instead of mining the wrong workspace. When local code is used to28explain public behaviour, establish how that revision relates to origin and29the deployed release.3031## Trace one contract end to end3233Follow only the layers relevant to the symptom:3435`source fact or URL owner -> generated output or data -> committed revision -> deployed release (code + data) -> CDN/WAF/edge cache -> crawler access -> engine record -> measured outcome`3637Attribute every observed public response to the layer that actually produced38it before changing any layer. Zone redirect rules, WAF and bot controls,39managed robots files, platform URL normalisation, and edge caches can act40before your application code — and your code's own tests can never prove that41phase ordering. When two layers disagree, report both states instead of42choosing the more convenient one. Do not audit every layer by default; stop43expanding when evidence identifies the owner and the smallest coherent fix.4445## Work the root cause46471. Reproduce the exact symptom on the exact host, path, protocol, method, and48 relevant user agent or account property.492. If this symptom was declared fixed before, first find the prior fix and the50 evidence that closed it. That shows what was proved and which later surface51 now contradicts it; do not repeat the same fix without explaining the gap.523. Inspect current source, generated artefacts, runtime data, deployed53 revision, edge response, and dashboard state only as needed to locate the54 first divergence.554. Find the existing owner of the URL, entity fact, indexability decision, or56 crawler control. Fix that owner instead of adding another override, then57 check the consumers affected by that decision.585. Prove the change at the lowest seam that contains the risk, then at the59 public seam below.606. Report each state separately. Never turn eligibility or submission into a61 claim of indexing, ranking, citation, traffic, or conversion.6263## The public seam gates "done"6465Before calling any public-facing change complete, fetch the exact queryless66canonical URL on the production host — GET, plus HEAD when redirects or caches67are involved — and tie the response to the deployed release (and data68generation) when the platform exposes one. None of the following count as that69proof: a local build, a preview or platform-default host, a feature branch, a70cache-busted or query-variant URL, a green test suite, a merged commit, an71accepted submission, or a dashboard rule that reports "saved". Each proves72only its own plane; say which plane you proved.7374## Non-negotiable judgement rules7576- Where surfaces refer to the same URL identity, redirects, canonicals,77 internal links, sitemaps, alternate hosts or encodings, structured data, and78 notifications should agree. The chosen host or slash policy is79 project-specific.80- Canonical identity is a semantic decision. Current content or result-set81 equality alone does not prove that two routes are permanent duplicates.82- A redirect is right only when its target is a true equivalent that is itself83 indexable and relevant. Transport success (`301 -> 200`) with a wrong,84 `noindex`, or generic target is content loss, not migration.85- Missing, ambiguous, rejected, and not-evaluated data are not positive facts.86 Do not replace them with plausible employment terms, locations, dates,87 prices, categories, ratings, profiles, or business details — visibly absent88 beats silently invented.89- Normal crawlable HTML, links, and public content are primary. Crawler-only90 files, Markdown mirrors, bot routes, or schema do not repair a weak, false,91 or client-side-only page.92- A deterministic tool or test can be consistently wrong, and a check that93 re-reads the same generated literal or fixture is not independent evidence.94 Treat tool output as an observation whose assumptions must match the95 contract.96- Do not assign a composite SEO, GEO, citability, authority, or platform score97 unless the user supplied a calibrated model. Rank findings by demonstrated98 blockage, breadth, user impact, and fix leverage.99- A technical repair proves technical eligibility, not SEO success. Traffic100 and ranking changes are evidence to investigate, not proof of one cause.101102## Route to the smallest relevant reference103104- For hosts, DNS/TLS, redirects, canonicals, robots, rendering, IDN and105 encoded URLs, sitemaps, migrations, generated output, CDN/WAF/edge106 behaviour, or caching, read107 [references/public-delivery.md](references/public-delivery.md).108- For helpful content, internal discovery, entity truth, structured data,109 local business, portfolio evidence, images, or backlinks, read110 [references/content-and-entities.md](references/content-and-entities.md).111- For programmatic routes, jobs, changing inventories, semantic defaults,112 pagination, lifecycle, error pages, or notification feeds, read113 [references/dynamic-pages.md](references/dynamic-pages.md).114- For Google AI features, ChatGPT search, Claude, Perplexity, bot categories,115 `robots.txt` policy, WAF and bot-management controls, IndexNow, or116 `llms.txt`, read117 [references/platform-controls.md](references/platform-controls.md).118- For Search Console, analytics, ranking loss, release identity, fixtures,119 dashboards, or a claim that work is fixed or complete, read120 [references/measurement-and-proof.md](references/measurement-and-proof.md).121122Read more than one reference only when the task crosses those boundaries.123124## Authority and finish125126An audit or diagnosis does not authorise code changes, deployment, Search127Console submission, provider settings, profile edits, outreach, or128publication. An implementation request authorises the smallest coherent129in-scope change and its proportionate validation. The indexability of a route130class, a canonical consolidation, a retirement status, and a crawler policy131are each product decisions: never change one as a side effect of another132task, and stop and ask when the missing decision is the product owner's to133make. Preserve unrelated repository and external state; report material134incidental findings instead of fixing them unasked.135136Finish with:137138- the root causes and owning layers;139- what changed, including intentional URL or content-contract changes;140- evidence for each local, deployed, public, dashboard, and search-engine141 claim you actually make;142- any material gap that prevents a stronger claim.143144Do not call the work fixed while the relevant public, cached, or external145state still contradicts it — and if you cannot observe that state, say so146instead of assuming it.