Steve Kim · 2026-07-19 · 10 min read

SEO Attribution Tools: Five Ways to Connect What You Shipped to What Google Did

Your engineering team merged forty pull requests last month. Organic clicks are up 12%. Most teams cannot say which changes did it — not because they lack data, but because the data lives in two systems that have never heard of each other. This is a taxonomy of the methods that connect them, including where each one honestly breaks down.


The attribution gap

SEO work at a company that ships software does not look like SEO work in a textbook. It looks like pull requests. A title-template rewrite is a PR. A fix for render-blocking JavaScript is a PR. A migration that accidentally drops 200 canonical tags is also a PR, and nobody labeled it "SEO" because nobody knew it was.

The results of that work land somewhere else entirely: Google Search Console, as changes in clicks, impressions, CTR, and average position. And they land late. Google has to recrawl the changed pages, reprocess them, and re-rank them — a lag that runs from days to weeks depending on crawl frequency. By the time a shift shows up in the GSC charts, the PR that caused it is three weeks old and buried under sixty newer merges.

Nothing in the default stack connects these two timelines. GitHub knows what changed and when. Search Console knows what happened and when. Neither knows about the other. So when a marketing lead asks "did the title changes work?" or an engineer asks "did my refactor tank rankings?", the answer is usually a shrug dressed up as a hypothesis.

That gap is what SEO attribution tooling exists to close. Teams close it five different ways. Each method makes a different tradeoff between rigor, effort, and the kind of site it works on — and each one is genuinely the right choice for somebody.

Manual annotation: a deploy log and a spreadsheet

The oldest method, and still where most teams start. Keep a log of ship dates — deploys, releases, major content pushes. Export GSC data on a schedule. When a metric moves, scroll the log, find what shipped in the preceding weeks, and write down your best guess.

Pros. Free. No new tools, no vendor, no approval process. It forces a habit that pays off regardless of tooling: writing down what you changed and when. For a small site shipping a handful of meaningful changes a month, a disciplined changelog next to a GSC export answers most attribution questions well enough.

Cons. It scales with human patience, which is to say it does not scale. The method degrades in three predictable ways. First, the log decays — someone forgets to record a deploy, and the record is now unreliable in ways you cannot detect. Second, eyeballing a GSC chart is a poor changepoint detector; humans see patterns in noise and miss real shifts that ramp gradually. Third, the crawl lag turns "what shipped just before this moved?" into "what shipped in the days-to-weeks window before this moved?" — and on a team merging daily, that window contains dozens of candidates. The spreadsheet cannot narrow them.

The right choice when: the site is small, changes are infrequent, and one person can hold the whole change history in their head. Manual annotation is not a lesser method for that situation — it is the correct one, and adopting anything heavier would be procurement theater.

SEO split-testing platforms

The most rigorous method available, used mostly at the enterprise end. Platforms like SearchPilot — enterprise SEO split-testing — divide a set of comparable pages into control and variant groups, apply a change to the variants only, and measure the difference in organic performance between the groups. Because control and variant experience the same algorithm updates, seasonality, and news cycles, the comparison isolates the change itself.

Pros. When the preconditions hold, this is the strongest causal evidence in SEO. A well-powered split test does not just tell you that something moved; it tells you the change caused the movement, with the confounders differenced out. For organizations that need to justify SEO investment to a skeptical CFO, group-vs-group evidence is hard to argue with.

Cons. The preconditions are steep. Split testing requires dozens to hundreds of comparable pages built from the same template — product listings, location pages, category hubs — so the groups are statistically exchangeable. A content site with 80 heterogeneous blog posts has nothing to split. It also only answers questions you thought to ask: a test measures the change you deliberately ran, and says nothing about the regression an unrelated platform PR shipped the same week. And it is an ongoing operational commitment — test design, minimum runtimes, traffic thresholds — with an enterprise sales motion to match. We wrote a longer engineering-eye view in SEO A/B testing for developers.

The right choice when: you run a large template-driven site — e-commerce, marketplaces, directories, travel — and you want prospective, experiment-grade answers about template changes. In that situation, nothing else comes close.

Search-Console-layer testing and reporting tools

A pragmatic middle tier. Tools like SEOTesting — testing and reporting built on top of Search Console data — let you define a "test": mark a date, mark a set of pages, and the tool compares GSC metrics before and after, packaged into readable reports.

Pros. Lighter-weight than a split-testing platform, quick to set up, and a real upgrade over the raw GSC interface for before/after questions. Time-based comparison works on any site shape — no template requirement, no minimum page count. For an SEO practitioner who already thinks in terms of "I changed these pages on this date," the workflow maps directly onto the job. Reporting output is presentable to stakeholders without manual chart surgery.

Cons. Before/after comparison is not causal inference. If Google ships a core update, a competitor collapses, or seasonality kicks in during your comparison window, the "after" period absorbs all of it and credits your change. The category as a whole shares two structural limits: the tests are manual (you must know a change happened and remember to log it — the unannotated engineering deploy is invisible), and the analysis has no counterfactual — it compares against the past, not against a model of what would have happened anyway. We compare this category in more depth in our guide to SEO testing tools.

The right choice when: a marketer owns the SEO changes end to end, changes are deliberate and known in advance, and you need affordable structure around before/after measurement without an engineering integration.

All-in-one suites: rank trackers with manual annotations

Many teams already pay for Ahrefs or Semrush — all-in-one SEO suites with rank tracking as one module among many. The attribution workflow they support is annotation: track your keywords, add a note on the chart when something ships, and read the two together.

Pros. Zero incremental cost if the suite is already in the stack. Rank trackers surface keyword-level movement that GSC's averaged, anonymity-filtered data can blur, and the annotation habit at least puts changes and outcomes on the same chart — which is more than most teams manage. As broad monitoring, the category is genuinely useful; a suite answers a hundred questions besides attribution.

Cons. Attribution is not what these tools are for, and it shows. Annotations are manual, so the log inherits every failure mode of the spreadsheet method — including total blindness to deploys nobody annotated. The analysis is visual correlation: a note near a line change, interpreted by whoever is looking. Rank trackers monitor a keyword sample you chose in advance, so movement outside that sample goes unseen. As we put it in SEO monitoring that finds what broke: a rank tracker tells you rankings dropped. It cannot tell you why — and on a site that ships code every week, the why is very often a deploy.

The right choice when: you need the suite anyway and your attribution questions are occasional rather than systematic. An annotated rank tracker plus discipline beats nothing by a wide margin. Just be clear about what it is: correlation you maintain by hand.

Causal attribution: changepoints matched against the deploy timeline

The newest method, and the one we build. Code Results (how it works) connects a GitHub repository and a Search Console property, then works the problem from both ends. On the outcome side, changepoint detection finds statistically significant shifts in clicks, impressions, CTR, and average position — actual structural breaks, not chart wiggles. On the cause side, it reads the full deploy and PR timeline. Then it matches the two, allowing for Google's crawl-and-index lag, and attributes each shift to the pull requests most likely responsible, with a confidence score. A counterfactual baseline — what the metric would have done without the change — turns "position improved" into a measured effect size.

Concretely, the output looks like: changepoint June 12 · average position 19.4 → 11.1 · attributed to 3 PRs · 91% confidence. That is one sentence an SEO lead can carry into a planning meeting and an engineer can trace back to a diff. It works in both directions — credit for wins, and catching the deploy that caused a regression — and it requires no per-change logging, because the PR history is the log.

Cons, honestly. The method needs a changepoint. A change whose effect is too small or too gradual to register as a statistical break will not be attributed — no shift detected, nothing to explain. Attribution is probabilistic, which is exactly why the confidence score is on every result instead of hidden behind it: 91% is not 100%, and the tool says so. And it requires that the site's changes actually flow through GitHub; work shipped outside the repo is invisible to it. It is retrospective inference about what did happen, not a prospective experiment — if you can run a proper split test, the split test is stronger evidence for that specific question. We ran the product on our own site and wrote up what it caught, including what it didn't.

The right choice when: your site ships through GitHub, changes land continuously from both marketing and engineering, and the recurring question is "something moved — which of the last N merges did it?" The free tier exists so you can connect a repo and a GSC property and check the answer against your own history before paying anyone anything.

How to choose

Match the method to the shape of your site, not to the sophistication you aspire to.

Large template-driven sites — thousands of comparable pages, dedicated SEO team, changes planned quarters ahead: split testing. You have the page volume the statistics require, and prospective experiments answer the questions your organization actually asks. Add continuous monitoring underneath, because regressions do not wait for your test calendar.

Sites that ship constantly — SaaS, content-plus-product companies, anywhere engineering merges daily and SEO outcomes are shared across teams: causal attribution. Your problem is not designing experiments; it is that forty undesigned experiments ship every month and nobody knows which ones mattered. You need the deploy timeline in the analysis, automatically, because nobody will maintain it by hand.

Small sites with infrequent changes: manual annotation, done with discipline. A changelog, a monthly GSC export, and honesty about uncertainty. Graduate to tooling when the change volume outgrows your memory — a Search-Console-layer tool is the natural next step if a marketer drives the changes, attribution if engineers do. Whichever tier you are in, a developer-facing SEO checklist prevents a good share of the regressions you would otherwise be attributing.

These methods also compose. Plenty of teams run split tests on their template pages, causal attribution across the whole property, and a rank tracker for competitive context. The categories answer different questions; they are not substitutes fighting over one budget line.

Attribution is the input, not the output

The point of connecting changes to results is not a prettier chart. It is the next decision: which class of work earned more investment, which kind of PR needs review before merge, which line item survives the budget meeting. Attribution with confidence scores is what turns an SEO report from a weather forecast into a defensible ROI case.

If you want the mechanics — how changepoints are detected, how the crawl lag is handled, how PRs earn a confidence score — the full walkthrough is in how attribution works. More on measurement generally is on the blog.

[ From the team building this ]

See which of your PRs actually moved rankings.

Code Results connects your GitHub deploys to Google Search Console with causal attribution — so you stop guessing which code change moved organic search, and start measuring it.

Start for free