Reconciled inventories, blockers with evidence and owners, and a rollback the release owner has run at least once before the go/no-go call.

A migration can look complete on a checklist while valuable URLs, existing redirects, or template-level search controls are still missing from the release candidate, and the point of this audit is finding that out while the team can still change, delay, or stop the release. We reconcile the source and candidate URL sets, compare the technical contract template by template, and rehearse the rollback before we ever issue a go/no-go call. You end up with reconciled inventories, named blockers, and a go/no-go call you can defend.

A migration team compares current and candidate site structures before approving launch.

Some of the 500+ brands we've worked with

See all references
  • Enerjisa
  • Domino’s
  • Madame Coco
  • HangiKredi
  • Canbebe
  • BAT
  • Turna.com
  • Amazon
  • BMW
  • Shell
  • Hyundai
  • PepsiCo
  • Red Bull
  • Decathlon
  • MediaMarkt
  • Bayer
  • Sanofi
  • EY
  • KPMG
  • GE
  • 3M
  • Lexus
  • Trendyol
  • Hepsiburada

The work follows a fixed sequence: define the comparison rules, reconcile evidence, test templates, rehearse rollback, and issue an owned release decision.

  1. Lock the comparison rules

    We record hosts, locales, environments, freeze dates, URL identity rules, protected journeys, owners, exclusions, and aligned Search Console and analytics baseline periods. Before the freeze date locks, the migration lead settles the URL identity rule for trailing slashes, parameters, and case, and names an owner for each exception.

    A contract defining the compared populations, valid sources, exception owners, and stop evidence.

  2. Reconcile source and candidate URLs

    We join crawls, sitemaps, CMS records, Search Console, analytics, logs, media, backlink targets, campaign destinations, and redirect history, then classify each record. Every unmatched or ambiguous row gets read individually. Genuine gap, normalization artifact, or a URL that never mattered are three different answers.

    A source-linked matrix with coverage totals, retained differences, and unmatched records.

  3. Compare technical contracts by template

    On representative URLs, we compare status, source and rendered content, canonical, robots, hreflang, sitemaps, internal links, pagination, structured data, errors, and caching. Our migration lead separates the intentional redesign decisions from the accidental regressions, and gives every real regression an owner and a retest date.

    Reproducible template diffs naming the affected cohort, changed control, owner, and retest.

  4. Rehearse failures and rollback

    We test redirects, indexability, localized routes, navigation, forms, analytics, server failures, caching, and rollback on the candidate, keeping environment limits visible. Whether an inconclusive result blocks the release is a judgment call, and the release owner makes it after running the rollback procedure at least once themselves.

    A pass, review, or block record plus a rollback instruction exercised under agreed conditions.

  5. Issue the go/no-go pack

    We combine baselines, protected cohorts, diffs, dependencies, retests, monitoring, exception owners, and rollback triggers. Critical evidence cannot become post-launch work just to protect the date. The launch group decides go or no-go, and no date pressure moves a genuine blocker into "monitor after launch" without an accountable owner attached.

    An owned record of passes, reviews, blockers, and the action attached to each.

AI joins the exports and rehearses the failures; people triage the rows and make the call.

AI drafts the scope contract from host, locale, and environment lists in existing crawls and CMS records, joins crawl, sitemap, CMS, Search Console, analytics, log, backlink, and redirect-history exports across hundreds of thousands of rows to surface unmatched records, diffs pre- and post-migration crawl snapshots template by template so one regression does not surface as a thousand line items, runs the scripted failure scenarios across redirects, forms, and localized routes and flags inconclusive checks, and assembles the go/no-go pack into one reviewable record. The decision is the launch group's. No audit score replaces URL- and template-level evidence, we do not remove source rows, narrow the population quietly, or downgrade a critical asset to make the candidate look ready, and we do not guarantee unchanged rankings, traffic, or crawling after migration.

The useful output is not a finding count. These artifacts let SEO, product, engineering, analytics, and release owners decide from the same URL evidence.

  • Decision matrix

    Source-to-candidate reconciliation matrix

  • Architecture map

    Critical asset and continuity map

  • Prioritized backlog

    Migration blocker and dependency backlog

  • Audit report

    Launch acceptance and rehearsal report

We call it done when: The reconciliation matrix, continuity map, blocker backlog, and acceptance report are done when every in-scope URL or asset carries provenance, current and candidate state, template and locale context, a discrepancy class, and an explicit exclusion or unresolved-match note, every protected cohort connects its search or business basis to a required treatment, owner, acceptance check, and rollback consequence, every blocker names its scope, reproducible evidence, severity, owner, correction, retest condition, deadline, and residual risk, and the report records the passes, accepted exceptions, monitoring sources, decision owners, and tested rollback trigger behind the call.

This audit fits while both sites remain inspectable and the migration can change. It turns a broad SEO request into specific URL, template, ownership, and release decisions.

A good fit when

  • The current site and a stable release candidate are available for side-by-side crawling, rendering, and control checks.
  • URL history is split across sitemaps, CMS, Search Console, analytics, backlinks, logs, campaigns, and old redirects, so no one can reconcile the source inventory.

Better handled as other work when

  • The new site is already live and the immediate job is to diagnose a measured loss. That calls for post-migration investigation.
  • Critical findings cannot change scope, delay launch, trigger a retest, or activate rollback. Without a decision path, the audit becomes an unused issue list.

If one of these is closer to your situation, start here instead: SEO Migration

We call it done when: The inventories reconcile, critical URL and template differences carry evidence and owners, unresolved blockers stay where everyone can see them, and the launch group can make a go/no-go call on tested checks and a rollback they have rehearsed.

  • Ahrefs

    adds backlink targets that crawls and analytics may overlook

  • Screaming Frog

    crawls current and candidate sites under identical comparison rules

  • Sitebulb

    clusters source-to-candidate differences into reproducible template regressions

  • Schema App

    diffs structured data coverage between old and candidate templates

  • Google Search Console

    identifies search-visible URLs and controls the migration must preserve

  • Google Analytics

    marks protected landing pages, events, and journeys before release

  • Weglot

    checks locale routes, alternates, and fallback behavior on candidates

The current site, the release candidate, your constraints, and whoever owns the decision. From there we define the smallest useful comparison and the checks behind a definitive go/no-go.
Discuss the audit with Zeo

Do you review URLs with little or no organic traffic?

Yes, when other approved evidence keeps them in scope. Sitemaps, CMS records, logs, backlinks, campaign use, locale relationships, legal or operational needs, and future roles can matter. Low observed traffic alone does not make a URL disposable.

What turns a finding into a launch blocker?

A material, reproducible failure affecting a protected user or search journey is a blocker when it has no accepted treatment, passing retest, or rehearsed rollback. Severity and ownership are agreed before the go/no-go review.

How long does a pre-migration audit take?

It depends on site size, environment access, and how fragmented the URL history is. A single-template site with clean sitemaps can reconcile in days. A large site spread across multiple CMS records, redirect layers, and locales takes longer. We scope the timeline once we see the actual inventories, not before.

What happens if the release candidate changes mid-audit?

Any change to templates, redirects, or routing after we've compared contracts invalidates the affected diffs. We rerun the comparison on the changed cohort before it goes back into the go/no-go pack. We don't carry forward evidence that no longer matches what will actually launch.