Technical SEO Handover Checklist Before Launch
A pre-launch and migration checklist for custom web builds: staging, robots, sitemaps, canonicals, redirects, Core Web Vitals, Search Console handover.
Why Technical SEO Belongs in the Handover, Not the Afterword
A custom web build can be flawless in code review and still lose months of organic traffic the week it goes live. The reasons are nearly always technical: a noindex left on, a sitemap that never updated, a redirect map that collapses to 302s, canonical URLs that disagree with the ones in the sitemap. None of these are visible from the design handover. All of them belong on an engineer's checklist.
This guide is a pre-launch and migration checklist for custom web builds. It is written for developers, tech leads and anyone running a cut-over. Each item is something to verify, not to describe. For scope and background on SEO in web design more broadly, we have a separate primer; this piece stays at the handover layer.
Staging Protection Before Launch
Staging environments routinely leak into Google's index because they answer 200 to any user agent and carry no access control. A noindex on staging is necessary but not sufficient: a stray internal link, an open directory listing or an accidental sitemap entry can still cause a snapshot to appear in search results.
- Require HTTP basic auth or a VPN at the edge. The right answer to an anonymous request on a staging host is
401, not200withnoindex. - Serve
X-Robots-Tag: noindex, nofollowon every response as a second line of defence. - Give staging its own
robots.txtthat disallows the whole site (User-agent: */Disallow: /). Do not reuse the production file. - Remove the staging host from any sitemap, feed or canonical that production emits.
- Confirm you can reach staging only from an authenticated session, including subdomains and feature-branch previews.
Robots Directives at Launch
Launch day flips the gate. The production robots.txt must allow crawling of the paths you want indexed and disallow private areas (login, cart, internal search, filtered facets that explode URL space). A robots.txt that still reads Disallow: / is the single most common launch regression — easy to verify, trivial to miss. Google's own documentation on how robots.txt works is worth re-reading during the handover.
robots.txtis reachable at/robots.txtand returns200.- No path that must rank is blocked (including CSS, JS and image hosts needed to render the page).
- Meta
robotsandX-Robots-Tagare not blanketnoindex. Grep the codebase for leftover development flags. robots.txtpoints to the correct sitemap URL on the production host.
XML Sitemap
The sitemap is a signal to crawlers about what exists, not a magic indexing lever. Follow the sitemap guidance in Search Central: UTF-8, under 50 MB uncompressed and under 50,000 URLs per file, with an index file above that. Generate it from the same source of truth that renders the pages — a hand-kept list is correct until the next publish and silently wrong afterwards.
- Every indexable, canonical URL is listed exactly once.
- Non-canonical, redirected, blocked or paginated URLs are excluded.
<lastmod>reflects the content's real update time, not the build clock.- The sitemap is referenced from
robots.txtand submitted in Search Console after launch.
Canonical Tags
Canonicals tell crawlers which URL is the authoritative version when alternates exist. Mis-set canonicals are a classic cause of indexing drift. Review the rules in the canonicalisation documentation and verify on real pages, not just in templates.
- Every indexable page carries exactly one self-referential canonical, absolute URL, matching protocol and host.
- Paginated listings canonicalise to themselves, not to page one.
- Filter and query-string variants either self-canonicalise, canonicalise to the clean URL, or return
noindex— pick one policy and apply it consistently. - Alternate language versions use
hreflang, not cross-language canonicals.
HTTP Status Codes
Status codes are the API crawlers trust. Content that returns 200 gets indexed; content that returns 404 or 410 gets dropped; 5xx on repeat causes URLs to fall out of the index.
- Spot-check every template: homepage, listing, detail, category, author, search, pagination, 404.
- Error pages return the correct status code, not a soft
200rendering of a "Not Found" template. - Blocked or legally removed URLs return
410rather than200with a holding page. - Rate-limited endpoints return
429instead of empty200s to Googlebot.
Redirect Mapping During Migrations
A migration without a redirect map is a traffic reset. Build the map from the old live sitemap plus the top organic landing pages from analytics, not from a tidy spreadsheet of what the stakeholders remember. Google's guide to a site move with URL changes covers the sequencing in detail.
- Permanent moves return
301(or308when the method must be preserved).302is for genuinely temporary swaps only. - One hop, not a chain. Point every old URL at its final destination directly.
- Preserve query strings and fragments where the destination needs them.
- Keep redirects live for at least 12 months — Google needs repeat crawls to consolidate signals.
- Spot-check high-value URLs with a crawler before switching DNS, and again immediately after.
URL Consistency and Trailing Slashes
Pick one URL form per route and enforce it with a 301. Inconsistency across templates, sitemap and canonical is the fastest route to self-cannibalisation.
- Decide trailing-slash policy at the server, not per template.
/pathand/path/must not both answer200with the same body. - HTTP redirects to HTTPS. The
wwwand apex versions are not both canonical. - Lowercase-only paths. Mixed case variants
301to the lowercase form. - Internal links, sitemap, canonical and schema
@idall use the same form.
Crawlability and Internal Links
Any page that is important enough to rank must be reachable by following links from the homepage within a few hops. Orphan pages — those with no incoming internal links — depend entirely on the sitemap, and that is a weaker signal.
- Run a full crawl from the homepage and compare the discovered URL list to the sitemap. Investigate the diff in both directions.
- Navigation, breadcrumbs and footer links use real anchor tags with real
hrefs, notonClickhandlers on<div>s. - Pagination exposes a crawlable path to every page in a long listing. Infinite scroll has a non-JS fallback.
- Internal links in body copy use descriptive anchors, not "click here".
Rendered Content
Googlebot renders JavaScript, but rendering is a second-pass, best-effort activity. Content that depends on client-side fetches may appear in the index late, incompletely or not at all. Prefer server-rendered HTML for anything that must rank.
- Open the page with JavaScript disabled: the main heading, body text and primary links must be present.
- View the page source (not the DOM) and confirm the ranking content is in the HTML response.
- Test with Google's URL Inspection tool after launch to see the rendered HTML Google actually produced.
- Lazy-load media below the fold; never lazy-load the LCP element or primary copy.
Titles, H1s and Meta in the CMS
Content editors need to change titles and meta without a developer. If the handover does not expose these controls, every future edit becomes a ticket, and most of them never get filed.
- Each page template exposes editable fields for
<title>, meta description, H1, OG title/description/image and canonical override. - Templates emit exactly one H1, derived from a field the editor controls.
- Defaults are sensible when a field is left blank — never an empty
<title>tag or a placeholder like "Untitled". - Preview reflects the final rendered
<head>, not a sanitised version of it.
Structured Data
Schema.org JSON-LD is the format Google parses most reliably. Validate it, do not just emit it.
- Every template renders the right types:
Organizationon home and about,BreadcrumbListon nested pages,Article/BlogPostingon editorial content,ProductandOfferon commerce pages. - Validate with Google's Rich Results Test and the Schema Markup Validator before launch.
- Fields in schema match the visible page content. Hidden prices or ratings get the markup disqualified.
- Multiple JSON-LD blocks are fine; conflicting
@ids are not.
Core Web Vitals and Performance
Core Web Vitals are measured in the field, not in the lab, so pre-launch verification sets a floor rather than guaranteeing the result. Follow the current thresholds documented on web.dev — LCP, INP and CLS — and treat lab tooling (Lighthouse, PageSpeed Insights) as a smoke test.
- LCP under 2.5 s on the templates that matter: home, pillar landing, article, product.
- INP under 200 ms on interactive pages (menus, filters, forms).
- CLS under 0.1 — reserve space for images, embeds and ads.
- Fonts load without a layout shift. Hero media has explicit
widthandheight. - Third-party scripts are audited, lazy-loaded where possible, and never block the main thread above the fold.
Mobile Behaviour
Google indexes the mobile version. Any difference between mobile and desktop is a potential ranking regression.
- Mobile and desktop render the same body copy, the same internal links, the same structured data.
- Tap targets are at least 48×48 CSS pixels with sensible spacing.
- Viewport meta is set and the layout works down to 360 px.
- No horizontal scroll on any production template at any breakpoint.
Broken Links
Run a full crawl of the production host immediately after launch. A clean codebase can still ship with dead links to a migrated article, an unresolved image or a third-party resource that moved.
- Zero
4xxor5xxon internal links. - Images, scripts and stylesheets return
200. - Outbound links to key references are alive.
- Social and Open Graph image URLs resolve.
Analytics and Search Console Handover
Analytics without an owner is noise. Make sure the client has access on launch day, not after the first week of questions.
- Analytics tag fires on every template; conversion events are defined and tested.
- Google Search Console property is verified for the correct protocol and host — ideally the domain property so
www, apex and subdomains roll up. - Sitemap is submitted in Search Console the moment production goes live.
- The client is granted owner-level access; the agency keeps collaborator access until the engagement ends.
- If an external SEO team is picking up the work, they get read access as part of the handover packet. Independent practices like Navicore's post-launch technical SEO work publish the exact artefacts they need at handover — align on that list before launch rather than after.
Post-Launch Crawl
The pre-launch checklist is a prediction; the post-launch crawl is the measurement. Run one within 24 hours of DNS flipping and another after a week, when Google has had time to recrawl.
- Compare the crawl against the sitemap: unknown URLs, orphaned URLs, duplicated titles, missing canonicals.
- Watch Search Console coverage and page experience reports daily for the first two weeks.
- Watch server logs for Googlebot: hit frequency, status mix, discovery of the new URL set.
- Investigate the first ranking drop quickly — most launch regressions are reversible if caught inside a week.
Ownership: Developer Fixes vs Ongoing SEO Work
The handover ends where ongoing work begins. Developers own the mechanics in this checklist: status codes, redirects, canonicals, performance budgets, schema templates, crawlability. SEO specialists own the content strategy, keyword research, link acquisition, competitive analysis and the slow work of earning rankings. The split is not always clean — content tooling, programmatic SEO and performance budgets sit across both — which is why multidisciplinary teams like Navicore run development and search inside a single workflow rather than lobbing tickets between separate agencies.
Whatever the arrangement, document it. Write down which checks the engineering team re-runs on every deploy (status codes, canonical sanity, sitemap freshness), which the content team owns (titles, meta, internal linking), and which the SEO function reports on monthly (coverage, Core Web Vitals field data, visibility). A handover without an operating model is a snapshot that stales within a release.
Treat this list as a verification gate, not reading material. If every item above returns a clean answer against the production host, the technical side of the handover is complete — and the launch becomes a cut-over rather than a cliff.
Related reading
How Many Shares Should a Startup Authorize at Incorporation?
A 10-million-share pool is common, but your split and tax costs matter.
What Are API Credentials and How Do They Work?
Learn how API credentials work and how to keep keys and tokens safe.
How Can You Grow a Startup Without Losing Focus?
Build steady startup growth with focused customers, strong teams, and useful measures.