Home›SEO QA›Pre-Deployment SEO Testing

SEO QA · Before release

Pre-Deployment SEO Testing

Test the release candidate against production before it ships, and leave with a documented go or no-go decision.

Staging environmentProduction baselineGo / no-go outcome

SEO QA · Verification process

Pre-deployment SEO testing checks a release candidate on a staging or preview environment and compares it with what production serves today. Its output is a decision, not a report: either the build is approved, or a named defect blocks it.

Definition

The baseline is production, because production is what search engines have already crawled. The candidate is the staging build. Every SEO-relevant difference between the two must be explained by a ticket before the build is approved. Anything unexplained is treated as a defect until proven otherwise.

Crawling a protected staging environment

Staging is usually hidden behind protection, so the crawl has to be configured to get in without treating the protection as a finding.

ProtectionHow to crawl itWhat to ignore in results
HTTP basic authAdd credentials in crawl settings401 on assets served from other hosts
IP allowlistRun the crawler from an allowlisted machine or VPNNothing, if allowlisting works
Preview URLs per pull requestCrawl the preview host for the branchHostname differences, after normalizing
Staging-wide noindexCrawl normallynoindex, but only if it comes from environment config

Use the same URL limit, start URL, user agent and rendering mode as the production baseline. Changed settings produce differences that have nothing to do with the release.

Proving blocks are environment-driven

A staging noindex is fine. A noindex hardcoded into a template, which happens to be correct on staging, will ship to production. The test is to find out where each block comes from.

SignalSafe sourceUnsafe sourceHow to tell
Meta robots noindexTemplate reads an environment flagLiteral noindex in template or CMS settingSearch the build output and template code for the literal value
X-Robots-TagStaging server or CDN config onlyApplication middleware shipped with the buildCompare middleware files between branches
robots.txt Disallow: /Generated per environmentStatic file committed to the repositoryCheck whether robots.txt is a file in the build
Canonical hostBase URL variable set per environmentHostname written into templatesStaging canonicals use the staging host, and the variable exists in production config
Quick check

Set the environment flag to production on a single staging instance and crawl five URLs. If noindex or Disallow remains, the block is not environment-driven.

Comparing staging to the production baseline

Normalizing hostnames means treating staging.example.com and www.example.com as the same site so that /pricing/ on one lines up with /pricing/ on the other. Audit comparison then lists the differences per URL. Requirements for each change should already exist as SEO acceptance criteria on the ticket.

Before and after example

Before deployment/products/sofa-grey/
200 · index, follow
canonical: www.example.com/products/sofa-grey/
→
After deployment/products/sofa-grey/
200 · index, follow
canonical: staging.example.com/products/sofa-grey/
Verdict: no-go. Robots looks right, but canonical base URL reads a variable that does not exist in production config.

Go or no-go matrix

SeverityExampleDecision
BlockerIndexable template gains noindex, canonical to wrong host, template returns 404No-go
MajorH1 removed from a template, structured data invalidGo only with the fix in the same sprint
MinorDescription length changes on a few URLsGo
ExpectedChange listed in the ticketGo, note for post-release comparison

Record the decision with the staging crawl attached. After release, the same build is verified on the live site in post-deployment SEO testing.