toolkit

Scenario · Content and search

Which 2–3 pages to optimise this month

“Which 2–3 pages do we work on this month, and why those?”

With around two hundred pages up for review every month, the strategist's real job isn't auditing every one of them — it's naming the two or three where work will actually move a number, and knowing whether each one has a traffic problem or a conversion problem, because those need completely different fixes. This pulls the behavior and search data needed to make that call, scores each candidate against both possibilities, and hands back a short, reasoned shortlist instead of another two-hundred-row spreadsheet nobody can act on.

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.SEMrush researchOptional integration — SEO-research client for the SEMrush Analytics API.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.Structured data (schema)Structured-data audit — checks a page's JSON-LD against a per-type rubric: valid JSON, a schema.org context, and the required and recommended properties that gate rich results for Organization, WebSite, Article, Product, LocalBusiness, BreadcrumbList, FAQPage, Event, Recipe and more.Link & image checkerOn-page link & image checker — extracts every link and image a page declares, fetches each to its status code, and reports the dead ones (4xx/5xx broken links and broken images) plus the link-quality issues search engines and screen readers care about: non-descriptive anchor text, image-only links with no accessible text, malformed links, insecure external links, new-tab links missing rel=noopener, and excessive link counts.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.

See it work

A real run of On-page SEO:

FAIL — 1 page(s) on toolkit-tests.pages.dev
      [error] missing <title>
      [warn] missing meta description
      [error] no <h1> on the page
      [warn] no rel=canonical link
      [warn] no viewport meta (mobile rendering)
      [warn] no lang attribute on <html>
      [warn] no Open Graph tags — shared links get a guessed title/description and no image
      [info] no <link rel="icon"> declared (a root /favicon.ico may still resolve; declare one for a modern SVG/PNG icon)
      [info] no apple-touch-icon — iOS home-screen bookmarks fall back to a page screenshot
      [info] no web app manifest (<link rel="manifest">) — needed for an installable PWA / richer mobile metadata
      [info] no theme-color meta — mobile browsers use it to tint the address bar
      [info] no structured data (see structured-data-schema)

  playbook: local fallback

  report: ./out/on-page-seo-on-page-seo.html
  text:   ./out/on-page-seo-on-page-seo.txt

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

The Page Optimization board runs ~200 rows a month. The strategist’s job is not to audit every page — it is to name the two or three where work will actually move the number. The distinction that matters is the one the human currently adds: is this a traffic problem or a conversion problem — because that changes the fix entirely.

  1. Fix the window first. Calendar month against the previous month, and the same month last year where seasonality matters. A cosmetic practice’s January is not its June; month-on-month alone will misreport a seasonal swing as a collapse. No window, no diagnosis.
  2. Pull behaviour — GA4 sessions and key events per page. The read is sessions, users and key events by page over the window; the comparison is the previous window. A page with meaningful sessions but zero or weak key events is a conversion problem, not a traffic problem. A page with no sessions is a traffic problem. Without GA4, label the behaviour read “Not verified — data unavailable (GA4 not configured)” and continue on search data alone — do not block.
  3. Pull search — GSC clicks, impressions, CTR and position per page and per query. The read is the same window plus the comparator. A page whose impressions held while position slid 3 → 11 is losing the ranking it had; a page whose impressions fell with position is losing visibility. Without GSC, label the search read “Not verified — data unavailable (GSC not configured)” and continue on behaviour data alone.
  4. Add SEMrush as directional cross-check where configured. Positions 4–20, intent, volume and competitor gap are third-party estimates — cross-check any meaningful trend with GSC before elevating it. When the key is not configured, label the enrichment “Not verified — data unavailable (SEMrush not configured)”.
  5. Score each candidate as traffic vs conversion. Traffic problem: meaningful query volume exists for the page’s intent but the page has no visibility (no impressions, positions 11–20, or a recent position loss). Conversion problem: the page has traffic (organic sessions, Clarity sessions, impressions with clicks) but no key events or a low conversion rate relative to peer pages. Name which it is per page — that is the value the human adds, and it determines whether the fix is discoverability (title, internal links, schema, brief) or on-page (CTA, form, trust, content).
  6. Rank to a 2–3 page shortlist, each with its reason and the numbers behind it. No more than three. Each row states: page + intent, traffic vs conversion label, sessions / key events / position movement that earned the rank, and what fixing it would plausibly move (CTR, rank band, key-event count). A page that already converts well but slipped in position is a different row than a page that ranks well but never converts — do not average them into one blended score.
  7. Do not invent what is not there. No credentials, no medical claims, no analytics that were not pulled, no task history that was not read, no competitor facts beyond what SEMrush returned. A contractual absence (no GA4, no GSC, no Monday task history) is distinguished from a fault and never graded as one. See the entitlements pattern: absence when not contracted is not a defect.
  8. [manual] Review and record the choice. The shortlist is a recommendation; the strategist approves the two that will actually be worked. Record the approved pair plus the numbers as the baseline that the per-page work plan will be measured against.
  9. [manual] Hand off each approved page to the selected-page work plan. One page, one implementation-ready change list with priority and post-change KPI, built from the same evidence set.

Traffic vs conversion is the whole point

A page with 255 Clarity sessions and zero key events does not need more traffic; it needs a call to action that exists and is reachable. A page that slid from 3 to 11 but still converts visitors who do arrive needs discoverability, not a rewritten CTA. Ranking the two together as one priority list without that label hands the editor the wrong job. The shortlist’s job is to make that distinction visible before any work starts.

What this does not cover

The work itself. Selection names the pages and the reason; the per-page work plan turns the top pick into an implementation-ready change list. It also cannot see value that does not show up as sessions, key events or position: a thin page that closes bookings by phone looks identical to a thin page nobody wants, and a contractual absence of GA4 or GSC is not a fault.

← All scenarios