An A/B test does not need to be invisible to Googlebot. It needs to avoid cloaking, keep URL signals understandable, and end cleanly. Serving the control only to crawlers while comparable users receive a materially different variant is the wrong pattern: Google's testing guidance applies the same spam rules during an experiment.
The stable approach is to use the same assignment rules for crawlers and users, expose a sensible no-cookie response, and keep alternate URLs tied to the original with temporary redirects and canonical signals.
Choose the URL model first
Use one URL when the test changes a component on the same page. Use separate variant URLs only when the experiment genuinely needs separate documents or navigation flows. That choice determines the search controls:
| Test shape | Response and canonical contract |
|---|---|
| Same URL, small component change | Keep one self-canonical URL and the same primary purpose across variants |
| Original URL redirects some traffic to a variant URL | Use a temporary 302; Google also permits JavaScript redirects for tests |
| A variant URL can be requested directly | Canonicalise it to the original URL |
Do not add noindex to a test variant that is meant to be consolidated with the control. A canonical expresses the intended relationship more accurately.
Keep assignment honest and observable
Cookie-based assignment is common, but Googlebot generally does not persist cookies. The no-cookie response must therefore be a complete version available to ordinary no-cookie users too. Do not branch on the user agent, verified crawler IP, or robots rules to force a crawler-only control.
Record the experiment ID and selected variant in server logs or an internal response header so QA can compare status, canonical, robots directives, primary content, and links without relying on analytics alone:
X-Experiment: checkout-copy-2026-07
X-Variant: b
Do not put sensitive assignment data in a public header, and ensure shared caches vary on the actual assignment mechanism. A cache that ignores the experiment cookie can unintentionally serve one user's variant to everyone.
Test the response matrix
Before launch, request the control and every directly accessible variant with cookies disabled and with each valid assignment. Verify:
- all responses have the intended status and one canonical;
- alternate URLs canonicalise to the original;
- the main purpose and indexable content do not become crawler-specific;
- links remain crawlable
<a href>elements; - cache keys do not collapse distinct assigned variants;
- tracking records exposure once rather than on every render.
For separate variant URLs, the contract is simple:
HTTP/1.1 302 Found
Location: https://example.com/landing-page?variant=b
<!-- on the directly accessible variant -->
<link rel="canonical" href="https://example.com/landing-page">
Post-test cleanup
When an experiment ends, remove assignment code, variant parameters, temporary redirects, and test-only cache rules. Apply the winning content to the canonical URL. If retired variant URLs had to exist independently, redirect them directly to the final winner and remove internal links and sitemap entries that expose them.
Keep the experiment only as long as the measurement requires. The structure of the test—not the presence of testing itself—determines whether it creates cloaking, duplicate URLs, unstable cache output, or a clean temporary variation.