Why Your Internal Linking Test Might Be Wrong: Z-Test Assumptions Explained
Check your sample size first: z-tests require at least 30-40 observations per variant to produce reliable results, though SEO experiments often need hundreds to detect realistic lift percentages. Verify normality by plotting your metric distribution—if your conversion rates or rankings show extreme skewness or outliers, the z-test’s confidence intervals become unreliable. Confirm your population standard deviation is genuinely known or that your sample is large enough (n > 100) to safely estimate it; most SEO tests fail this quietly, producing overly confident p-values. Test for independence by checking that treated and control pages don’t cannibalize each other’s traffic or share the same user sessions. When assumptions break—particularly normality with small samples or unknown variance—switch to t-tests for continuous metrics or proportion tests with continuity corrections for binary outcomes. The cost of ignoring violations isn’t just statistical: you’ll either kill winning tests early or scale losing changes across thousands of URLs.

What the Z-Test Actually Requires
Sample Size: The 30-Page Minimum Rule
The 30-observation threshold comes from the Central Limit Theorem: with enough data points, sampling distributions approach normal even when individual values don’t. Below 30 pages per group, your z-test p-values become unreliable—what looks like a 95% confidence interval might actually be closer to 85%.
Testing with 10-15 pages is common in SEO experiments targeting specific page types, but it produces false positives. A 12-page test showing +40% traffic with p=0.03 may simply reflect natural variance, not your meta description changes. The smaller your sample, the more likely extreme values skew your mean.
When you have fewer than 30 observations, use a t-test instead. It adjusts for small-sample uncertainty by widening confidence intervals and requiring stronger evidence before declaring significance. Many SEO platforms default to z-tests regardless of sample size—verify before trusting automated results.
For quick checks: if your group size is borderline (25-35 pages), run both tests. Similar p-values suggest robust findings; divergent results mean you’re in the uncertain zone where sample size matters.
Independence: Why Testing Product Pages Together Fails
Independence requires that one page’s performance doesn’t influence another’s. Product pages rarely meet this standard. Internal linking creates direct dependencies: anchor text from your “blue widgets” page can boost rankings for “blue widget accessories,” while both compete for similar query space. When you test pages in the same category, shared link equity flows between them through navigation menus, related product modules, and breadcrumbs. Keyword cannibalization compounds the problem—Google may swap which page ranks for overlapping terms mid-test, creating false negatives or positives. Testing “red shoes” and “crimson sneakers” simultaneously means changes to one alter the other’s traffic through search result reshuffling. Your control group corrupts your treatment group, invalidating the z-test’s foundational math. Select test pages from unrelated categories with distinct keyword targets and minimal cross-linking to preserve independence.
Normality: When Traffic Data Breaks the Bell Curve
Organic traffic rarely follows the bell curve. A handful of landing pages capture the majority of visits—the classic long-tail distribution—while most pages sit in near-obscurity. This right-skewed reality violates the normality assumption baked into z-tests.
Seasonality compounds the problem: retail sites spike in November, tax software in March. When you slice data by week or day, these patterns create bumpy, non-normal distributions. Layer on algorithm updates—especially Google’s Core Updates—and traffic can lurch or flatline overnight, shredding any semblance of normalcy.
The good news: the Central Limit Theorem relaxes normality requirements when sample sizes are large (typically n > 30 per variant). Your test’s mean traffic becomes approximately normal even if individual page visits aren’t. This statistical cushion means you can often proceed with a z-test despite messy underlying data—but only if independence and sample size hold firm. When in doubt, visualize your distribution first.
Real Case Study: When Bad Assumptions Cost Rankings
In Q2 2023, a SaaS company’s growth team tested a new template on 12 product pages, targeting mid-volume keywords. After two weeks, their z-test showed a 22% traffic increase with p<0.05. They celebrated, rolled the template to 340 similar pages, and watched organic traffic drop 18% over the next month. The violated assumption: independence. The 12 test pages all targeted variations of "project management software for [industry]" and ranked for overlapping keyword clusters. When Google's algorithm adjusted rankings after the template change, the pages cannibalized each other's visibility. The initial lift came from three pages that happened to gain featured snippets, temporarily masking drops across the other nine. Their z-test treated each page as an independent observation, but the pages competed in the same SERP ecosystem. Clicks on one page directly reduced impressions for others. The small sample size, 12 pages, made this dependence catastrophic. A proper test would have used page clusters as the unit of analysis or isolated pages targeting truly distinct keyword sets. The recovery took four months. The team reverted templates on the worst performers and eventually lost traffic patterns stabilized only after they rebuilt topical authority through content consolidation.
Why it matters: When your test units share ranking signals, keyword overlap, or internal link equity, standard z-test math breaks down. The formula assumes your 12 pages behave like 12 coin flips, independent events. In SEO, they behave like 12 players on the same team, where one’s performance directly affects the others.

Quick Checks Before You Run the Test

Visual Tests You Can Run in 2 Minutes
In Google Sheets, create a histogram by selecting your data, then Insert > Chart > Histogram. Look for strong skew (long tail on one side) or multiple peaks—both signal non-normality. For tighter validation, generate a Q-Q plot in Python using scipy.stats.probplot(). If points follow the diagonal line closely, you’re normal; systematic curves or S-shapes mean violations. Sheets users can export to Colab for quick Q-Q checks. These visual tests catch obvious problems in under two minutes, helping you decide whether parametric tests are safe or whether you need alternatives like bootstrap methods.
When to Use Non-Parametric Tests Instead
When your SEO experiment data violates z-test assumptions—non-normal distributions, small samples under 30, or heavy skew from outliers—switch to the Mann-Whitney U test. This non-parametric alternative compares rank order instead of raw values, making it robust to skewed metrics like time-on-page or conversion rates with extreme values. It requires no assumptions about distribution shape and works reliably with samples as small as 5-10 per variant. The tradeoff: slightly less statistical power when data is actually normal, but far more trustworthy results when it’s not. For most SEO experiments with real user behavior data, Mann-Whitney often proves the safer default choice.
What to Do When Assumptions Don’t Hold
When z-test assumptions break down, you have four practical paths forward rather than abandoning statistical rigor entirely.
Bootstrapping methods resample your actual data thousands of times to build empirical confidence intervals without assuming normality. Use this when traffic distributions are heavily skewed or sample sizes remain stubbornly small despite extended test windows.
Extending test duration increases your sample size, which often resolves normality violations through the central limit theorem and reduces the impact of temporal autocorrelation. Run tests for at least 2-4 full business cycles when initial sample sizes fall below 1,000 sessions per variant.
Segmenting tests by page type or user cohort ensures independence when different URL groups exhibit different behaviors that violate the identical distribution assumption. Apply this when mixing transactional and informational pages in a single test, or when bot traffic contaminates specific segments.
Log transformations compress right-skewed traffic distributions closer to normality by reducing the influence of extreme outliers. Transform your metrics when a handful of viral pages generate 10x typical traffic, then run the z-test on log-transformed values and back-transform results for interpretation.
Each workaround trades simplicity for validity. Bootstrapping requires coding skills but handles nearly any violation. Longer tests cost time but need no special analysis. Segmentation fragments your data but preserves accuracy. Transformations work fast but require careful back-conversion when communicating results to stakeholders.
Checking z-test assumptions takes five minutes. Skipping them can burn months chasing phantom wins or rolling out changes that hurt traffic. Understanding normality, independence, and known variance isn’t academic gatekeeping—it’s the difference between a reliable experiment and expensive noise. Before you shift strategy based on a p-value, verify your data meets the requirements. When assumptions break, switch methods rather than proceeding blind. The effort is minimal; the protection is substantial. Run the checks now, especially if you’re evaluating recovery strategies after algorithm updates when baseline variance shifts unpredictably. Statistical rigor prevents costly pivots built on false signals, keeping your testing program credible and your roadmap grounded in real performance gains rather than statistical artifacts.