Blog
How to Run AI Visibility Regression Tests After a Website Migration
A website migration can preserve search rankings while quietly changing crawler access, rendered content, entity facts, and the sources AI systems use. A before-and-after regression test makes those changes visible.
A migration is not complete when the new pages return 200 status codes. It is complete when the important information remains reachable, renderable, understandable, and attributable across the systems that may use it. That includes search crawlers, AI crawlers, Common Crawl, and live answer systems such as ChatGPT and other assistants.
The practical way to test this is to treat the migration as a software release: define a pre-migration baseline, run deterministic checks after launch, compare representative prompts, and investigate meaningful deltas instead of relying on anecdotes. This is a measurement exercise, not a promise that a particular model will cite a page.
Define what “AI visibility” means before testing
AI visibility is not one score and it is not a synonym for rankings. At minimum, separate three layers that are often mixed together:
- Crawl access: whether a crawler can fetch the site and its important resources under the relevant robots.txt rules, status codes, redirects, and network conditions.
- Training or open-web presence: whether content may have been available to datasets such as Common Crawl. This is historical coverage, not evidence that a model learned a specific page or will use it in an answer.
- Live answer visibility: whether a model mentions, recommends, or cites the site for a defined prompt at a defined time, region, account state, and model version.
A migration can improve one layer and weaken another. For example, a cleaner site may be easier to crawl while a rewritten product page no longer contains the exact facts that support a useful answer. Your test plan should report these layers separately rather than combining them into a misleading pass/fail result.
Build a before-and-after test inventory
Create the baseline before changing DNS, routing, templates, or content. Export the URLs and attributes that matter to the business, not just the URLs in the XML sitemap. Include product pages, service pages, comparison pages, documentation, locations, author pages, and high-value articles.
- Select critical URLs. Mark the pages that describe your products, category, audience, differentiators, pricing, availability, policies, and company entities.
- Map old URLs to new URLs. Record the expected destination, redirect status, canonical URL, title, headings, word or content blocks, and key facts for each mapping.
- Save representative HTML. Capture the response HTML and, where relevant, a rendered DOM or screenshot. A browser view alone can hide differences in the server response that a crawler receives.
- Record technical signals. Include robots.txt, XML sitemaps, HTTP status, redirect chains, canonical tags, hreflang, JSON-LD, metadata, internal links, and important asset requests.
- Freeze a prompt set. Use the same prompts before and after launch, with timestamps, model names, region, and any relevant settings recorded.
A useful inventory has both URL-level and prompt-level rows. The URL rows answer “can the important source be reached and understood?” The prompt rows answer “does the system still use or describe that source in the same way?” Keep the raw captures; summaries without evidence are difficult to debug.
Run the URL and crawl-access regression checks
The first post-launch pass should be mechanical. It should not depend on an AI model’s current answer. Start at the old URL list and verify the expected path to the new URL.
| Check | What to compare | Typical regression signal | Why it matters |
|---|---|---|---|
| Old-to-new mapping | Expected destination, status, and redirect count | 404, 410, redirect loop, or several hops | A broken or noisy migration path can prevent retrieval and lose useful link context. |
| Canonicalization | Declared canonical versus final URL | Canonical points to an old, alternate, or unrelated page | Conflicting canonical signals make page identity less clear. |
| Robots and sitemaps | Rules, sitemap URLs, last-modified values, and inclusion | Important paths blocked or absent from current sitemap | Access and discovery are prerequisites for many downstream systems. |
| Rendered content | Server HTML versus rendered DOM | Key copy appears only after blocked or unreliable JavaScript | A visible browser page is not proof that every crawler receives the same content. |
| Internal links | Links from navigation, hubs, and related content | Important pages become orphaned or less connected | Internal context helps crawlers discover and interpret pages. |
| Structured data | JSON-LD types, properties, IDs, and references | Product, organization, author, or location facts disappear | Structured data can make entities and relationships easier to interpret, though it does not guarantee citations. |
Check robots.txt from the production hostname and protocol, including any redirects to it. Review disallow rules for AI crawlers separately from general search rules, but do not assume that allowing a crawler guarantees a citation. For a practical implementation checklist, see the guides to robots.txt and AI crawlers, crawlable HTML versus SPAs, and llms.txt.
Also inspect the final response, not only the source URL. A page that returns a successful status to a browser but depends on a client-side route, delayed API call, cookie, or geo condition may not expose the same information to a crawler.
Compare page meaning, entities, and facts—not just templates
A migration can pass every URL check while changing what a page actually says. Compare the semantic content that supports the organization’s identity and buyer decisions.
- Entity identity: organization name, parent or subsidiary relationships, locations, authors, product names, and official domains.
- Product and service facts: capabilities, compatibility, dimensions, plans, pricing language, availability, restrictions, and supported use cases.
- Differentiators: verifiable claims that distinguish the business from competitors, including evidence, certifications, integrations, or service boundaries.
- Page purpose: whether a product page still answers product questions, a comparison page still compares alternatives, and a documentation page still contains the procedure or specification.
- Evidence and attribution: author information, dates, references, customer proof, first-party documentation, and consistent claims across pages.
Use a fact ledger for high-value entities. Each row can contain a fact, its preferred wording, the source URL, the structured-data property if applicable, and whether the fact changed during migration. This catches subtle regressions such as a product losing its supported platform, an organization name changing in one template, or a location page inheriting the wrong address.
JSON-LD is useful when it accurately describes visible page content and connects related entities. It is not a hidden control channel for answer engines. Validate it alongside the visible HTML using the JSON-LD and AI discovery guide, rather than treating valid syntax as proof of discoverability.
Test live prompts with a controlled comparison set
Live answer testing is inherently less deterministic than HTTP checks. Models can change retrieval sources, wording, context windows, and citation behavior. You can still make the comparison useful by controlling the test conditions.
- Create prompt groups: category discovery, buyer-intent recommendations, product comparisons, factual entity questions, use-case questions, and support or policy questions.
- Write prompts that do not assume your brand. Include a separate set that names the brand or product so you can distinguish discovery from confirmation.
- Run the same prompts before and after migration. Preserve exact wording, model, model version where available, region, language, browsing setting, account state, and date.
- Capture the complete answer and cited sources. Record whether the site was mentioned, recommended, linked, or cited, and whether the answer stated a relevant fact correctly.
- Repeat selected prompts. One answer is an observation, not a stable rate. Use repeated runs or scheduled samples to identify a pattern rather than overreacting to one response.
| Metric | Definition | Use with caution |
|---|---|---|
| Mention rate | Share of runs in which the organization or product is named | A mention may be incidental or factually wrong. |
| Recommendation rate | Share of eligible prompts where the site or product is recommended | Define what counts as eligible and distinguish a qualified recommendation from a list mention. |
| Citation rate | Share of answers that link to or cite a relevant page | Citation formats and retrieval behavior vary by model and interface. |
| Correct-fact rate | Share of tested facts represented accurately | A high mention rate is not useful if product, pricing, or identity facts are wrong. |
| Competitor share of voice | Relative presence among a fixed competitor set and prompt set | It is a comparison within your sample, not market-wide visibility. |
For prompt design, the buyer-intent content guide, ChatGPT citations guide, and AEO checklist provide useful starting points. Keep the prompt set stable during the migration comparison; changing prompts at the same time makes the result uninterpretable.
Account for model-specific and time-dependent changes
A post-migration answer may differ for reasons unrelated to the website. Models update, retrieval indexes refresh at different times, browsing may be enabled or disabled, and answer interfaces can select different sources for the same question. Your report should expose those variables.
- Name the model and interface used, including whether web browsing or search was enabled.
- Record the run date, time zone, country or region, language, and logged-in state where those affect results.
- Keep a control group of prompts about stable, unrelated topics. If those answers change broadly, the model or test environment may have shifted.
- Compare source types. A live citation, a search result, a Common Crawl record, and a model-training claim are different observations.
- Mark uncertainty explicitly. Use labels such as “not observed,” “not tested,” or “inconclusive” instead of converting missing evidence into a failure.
Common Crawl presence can be checked as an open-web coverage signal, but it cannot establish that a current model trained on the page or that the page will appear in a live response. The Common Crawl and training presence guide explains that distinction.
Set regression thresholds and investigate deltas
Do not choose thresholds after looking at the results. Before launch, decide which failures block release, which require investigation, and which are normal variation.
| Severity | Example | Suggested action |
|---|---|---|
| Release blocker | Critical page returns 404, is blocked, renders no core content, or redirects to the wrong entity | Fix before or immediately after launch; rerun the full technical check. |
| High | A major product or organization fact is missing, contradictory, or attached to the wrong page | Assign an owner, correct the source, and retest the fact ledger and affected prompts. |
| Medium | Citation or recommendation rate declines across repeated, controlled runs | Check crawl access, content changes, model conditions, and sample size before attributing causation. |
| Low or inconclusive | One prompt changes wording or loses a citation in one run | Log it, repeat under the same conditions, and avoid treating it as a migration effect. |
A useful report shows absolute and relative changes, sample counts, and confidence limits where the sample is large enough. For small prompt sets, show the raw runs. “Three of ten prompts changed” is more honest and actionable than a single composite visibility score.
When a delta appears, trace it in order: URL resolution, access rules, rendered HTML, canonical and sitemap signals, entity facts, internal links, and only then prompt behavior. This sequence prevents teams from rewriting content to solve what is actually a redirect or rendering failure.
Turn the migration test into an ongoing monitor
A migration regression test is most valuable when it becomes a repeatable operating process. Keep the pre-migration captures as a reference, then schedule smaller checks after launch.
- Run a daily or per-deploy technical smoke test for critical URLs, robots.txt, sitemaps, status codes, rendering, and structured data.
- Run a weekly or biweekly prompt sample with the same models and conditions where possible.
- Review changes to templates, navigation, product facts, and robots rules as release inputs, not only after a visibility drop.
- Maintain a changelog connecting deploys to observed changes in crawl access, content, and live answers.
- Segment results by model, prompt type, product, country, and page template so an aggregate number does not hide a localized regression.
A scan can make the mechanical portion easier to repeat. BatSignal’s features cover checks such as AI crawler and robots access, content readiness, metadata, JSON-LD, sitemap and llms.txt signals, open-web coverage, and sampled AI visibility. You can review the methodology to understand what is measured and what is not.
A practical migration test worksheet
Use the following minimum worksheet for each migration. Store it with the release record so future changes can be compared against the same baseline.
FAQ
What should I test first after a website migration?
Start with URL resolution, redirects, robots.txt, sitemap availability, and rendered HTML. These checks establish whether crawlers and answer systems can reach and interpret the pages that matter. Then test entity facts, structured data, and live prompts.
Can a migration reduce ChatGPT citations even if organic traffic is unchanged?
Yes. AI answer visibility and conventional search traffic overlap but are not identical. A migration can alter page text, headings, internal links, canonical signals, rendering, or crawl access without producing an immediate measurable change in search traffic.
Should I test every URL and every possible AI prompt?
Usually not. Test every important URL mechanically, then use a representative prompt set for buyer-intent, comparison, recommendation, and factual queries. Expand the set when a page template, market, product, or model behaves differently.
How long should I wait before comparing post-migration AI visibility?
Run technical checks immediately and repeat them after launch. For live answer citations, record an immediate baseline and then schedule repeated checks over several weeks because model retrieval, indexing, and answer composition can change independently of the migration.