toolkit

Scenario · Something looks broken

Why did this page drop?

“We were number three for this and now we're on page two.”

"We were third for this and now we're on page two" creates enormous pressure to name a cause immediately, and the honest answer is often that nothing on the site actually changed at all — competitors improved, or the market shifted, and neither of those is something a website can fix. This works through every self-inflicted cause first, in order — a measurement break, a tag that stopped firing, a page that quietly lost its search visibility or the links pointing at it — before ever pointing at anything outside the site's own control, so "nothing we did" becomes an earned conclusion instead of an excuse with no evidence behind it.

What to ask for

GA4 behaviour seriesOptional integration — reads the GA4 Data API and writes the behaviour series, the sibling to Search Console series.Search Console seriesOptional integration — reads Search Console's Search Analytics API and writes the data series nothing else has.On-page SEOOn-page SEO scan — reads a page's delivered HTML and checks the head, meta and heading signals search engines use: title presence and length, meta description, rel=canonical, meta robots (noindex), Open Graph tags, viewport, html lang, and exactly one H1, plus a structured-data summary.Redirect checkRedirect-chain validator — follows where each URL actually sends a browser, hop by hop, and reports the loops, over-long chains, temporary (302/307) redirects where a permanent one belongs, meta-refresh and JS redirects, https-to-http downgrades, and dead ends.Content freshnessContent-freshness audit — works out how old a page's content is from every freshness signal it can see: schema datePublished/dateModified, time elements, the Last-Modified header, and visible "last updated" dates.Internal link graphInternal link-graph audit — given a site's URL universe, fetches each page, extracts the internal links, and builds a directed graph of how the site links to itself, then grades the signals rankings depend on: ORPHAN pages linked from nowhere, pages unreachable from the home page, pages buried too many clicks deep, thin single-inlink pages, generic anchor text, and exact-match over-optimization.Analytics & tagsAnalytics & tag presence audit — reads a page's delivered HTML and inventories the measurement, advertising and session-replay tags firing on it: Google Tag Manager, GA4, legacy Universal Analytics, Google Ads, Meta Pixel, LinkedIn, TikTok, Microsoft Ads, Pinterest, Clarity, Hotjar, Segment, Matomo.GTM audit and fixUnified Google Tag Manager audit-and-fix workflow.

See it work

A real run of Analytics & tags:

FAIL — 1 page(s)
      tags: Universal Analytics (legacy) (UA-12345-1) — legacy
      [error] legacy Universal Analytics present (UA-12345-1) — UA stopped processing data in July 2023; this tag is dead weight
      [warn] no analytics or tag manager detected — is this page being measured?

  playbook: local fallback

  report: ./out/analytics-and-tags-analytics-and-tags.html
  text:   ./out/analytics-and-tags-analytics-and-tags.txt

The captured report, exactly as a run hands it to a client —open the full report ↗

The pressure is to produce a cause, and the honest outcome is often “nothing we did”. Working it in the order below means that conclusion is earned rather than assumed. This is reasoning over a time series that composes the page auditors as evidence — not page auditors with a ranking on top.

  1. Confirm the number is real before any content hypothesis — measurement first, always. Pull the Search Console series and the analytics series for that page and term: when it moved, how sharply, and whether impressions, clicks, sessions and conversions moved together or diverged. A shelf of minimum samples applies before a rate is trusted at all. A cliff at midnight on one date is a deployment or a tag break; a slow slide over two months is a market. Traffic down with impressions steady is usually a measurement fault; both down together is usually real. If the window is wrong, no diagnosis is valid.
  2. Audit what is actually firing on the page. The analytics and tag inventory grades the classic faults: a container missing on some pages, a duplicated GA4 tag double-counting, legacy UA still present, a tag that stopped firing, a consent banner that started blocking before consent. A site-wide template that lost its tag is the single most common cause of a cliff-edge drop. Look inside the container too — a paused tag or a trigger that stopped matching is invisible from the page alone.
  3. Match the shape to its fingerprint — not a checklist. Each cause has a recognisable shape in the series: tracking regression (overnight cliff, single page or template), bot spike inflating the baseline (then a “drop” that is a return to normal), deploy-correlated drop (date совпадает with a publish), campaign ramp ending (referrer or ad channel falling with it), SEO decay (slow position slide while impressions hold), platform or consent change (measured traffic falls with no ranking change). Name the fingerprint that fits or state that none does — do not rank within a blind spot.
  4. Check the page is still indexable and the URL still resolves. On-page indexability and the redirect chain are the self-inflicted causes that are entirely fixable. A noindex, a canonical pointing somewhere else, a title rewrite, a redirect chain or a migration artefact. Only after steps 1–3 have confirmed the number is real and the fingerprint does not already explain it.
  5. Check whether the page lost its internal support or went stale. The link graph and the freshness read together. A menu or section redesign that removed the links pointing at this page, or content that went stale while three competitors published better pages. Old and accurate is fine; old while competitors moved is the situation.
  6. [manual] Apply the refusal gate before recommending. Do not escalate a correlation into a recommendation without an identification strategy. State explicitly what would have to be true to make the proposed fix the cause, and what the check after the fix will show. If that cannot be stated, the step is a next observation, not a cause.
  7. [manual] Look at who is now ranking above it, and read their page. This is the step that distinguishes “we broke something” from “they did something better”, and no tool makes that judgement.
  8. Report the cause or the honest absence of one — with what cannot be seen. If steps 2–5 are clean, say so plainly: nothing on our side changed, the competitive picture did — and enumerate the causes this recipe cannot see (competitor improvement, ranking-system change, intent shift). Then the conversation is about investment rather than blame, which is the correct conversation.

“Nothing we did” is a finding

Delivered without evidence it sounds like an excuse; delivered with four specific checks ruling out four specific self-inflicted causes it is a conclusion. That is the entire reason this has a written order. A page-shaped composition cannot reach a time-series cause; it will confidently rank a cause from the only evidence it can see, which is the failure mode this order is designed against.

What this does not cover

The most likely answer. Rankings move because competitors improved, because Google changed its ranking, or because intent for the term shifted — none of which is visible from our own site and none of which any check here reports. What this rules out is the self-inflicted causes, which are the only ones we can do anything about, and finding none of them is a real result rather than a failed investigation. It also cannot see a tracking regression, a bot-wave-inflated baseline, a campaign that ended, or a comparison window chosen to manufacture a drop — those are measurement faults the reasoning layer must rule out first before any content hypothesis is offered. The causes the recipe cannot see are enumerated explicitly rather than ranked within its blind spot, and no rung-1 correlation is escalated to a rung-2 recommendation without an identification strategy.

← All scenarios