Introduction#
This guide teaches SEO professionals how to build a trustworthy AI-powered analyst that reviews data from multiple SEO platforms, identifies meaningful changes, investigates likely causes, and recommends the highest-priority next actions.
The emphasis is decision support, not autonomous optimization. The workflow you build here reads data and writes a brief; a person decides what to change.
Every factual product capability in this guide is backed by the vendor's own documentation. Any suggested workflow, threshold, or implementation pattern is presented as a recommendation, not a platform requirement — where we recommend something, we say so explicitly.
What You'll Build#
A Daily AI SEO Analyst is a repeatable workflow that combines structured SEO data with a large language model to answer four questions every day.
Unlike a dashboard, which primarily reports metrics, an AI analyst investigates relationships across multiple data sources before presenting prioritized findings. The output is a short daily brief: what moved, whether the movement is material, the most likely explanation, and the checks a human should run next.
This guide deliberately does not describe an autonomous agent. The analyst does not publish content, edit metadata, deploy code, change redirects, submit URLs, modify analytics configuration, or make any production decision without review.
Explicitly out of scope
- Publishing or editing content
- Editing metadata, redirects or robots directives
- Deploying code or submitting URLs for indexing
- Changing analytics configuration
- Any production change without human review
The four daily questions
- What changed?
- Does it matter?
- What most likely caused it?
- What should we investigate or do next?
Before you build: readiness checklist
0/6 done
How an AI SEO Analyst Thinks#
Before you connect anything, decide how the analyst reasons. A model with excellent data and no reasoning discipline produces confident nonsense; a model with modest data and a strict evidence loop produces briefs a senior SEO can act on.
Everything in this chapter is Connector Scout editorial guidance. It is not a vendor requirement, and no platform documents an "investigation loop", an "evidence layer" or a confidence band. What the vendors document is what their APIs return; how you reason across those returns is a house style, and this is ours. Sections that cite official documentation are labeled as official documentation throughout the guide, so the difference is always visible on the page.
The mindset has four moving parts: a repeatable investigation loop, a layered view of what each evidence source can and cannot prove, an explicit separation of facts from hypotheses with a confidence score attached, and a prioritization framework that decides what the reviewer should look at first.
The investigation loop
Every flagged change runs through the same six steps, in the same order. The order matters more than any single step: skipping validation produces false alarms, and skipping corroboration produces confident hypotheses dressed up as findings.
Observe the change, validate that it is real, localize where it is concentrated, explain it with competing hypotheses, corroborate against a second source, then prioritize what the reviewer sees first.
Step 1Observe
What actually changed, in numbers?
Read the metric, the window and the magnitude straight from the source API. No interpretation, no adjectives — a click count against a stated baseline.
OutputA labeled verified fact with source, window and magnitude.
Step 2Validate
Is the change real, or an artefact of measurement?
Rule out reporting latency, partial days, tagging changes, sampling, thresholding and low-volume noise before treating a delta as a finding. Most false alarms die here.
OutputA pass or fail on data quality, with the reason recorded.
Step 3Localize
Where is the change concentrated?
Slice by page, query, country, device and date until the change stops being site-wide. A drop isolated to one template is a different problem from a drop spread evenly across the site.
OutputThe narrowest segment that still contains the change.
Step 4Explain
What could plausibly cause this segment to move this way?
Generate competing explanations rather than one. Every explanation is written as a hypothesis, and each one names the evidence that would confirm or kill it.
OutputTwo or more labeled hypotheses, each with a test.
Step 5Corroborate
Does a second, independent source agree?
Test the surviving hypotheses against a different evidence layer — search data against analytics, analytics against behavior, on-site against off-site. Agreement raises confidence; disagreement is itself a finding.
OutputA confidence score with the corroborating sources named.
Step 6Prioritize
What should the reviewer look at first?
Rank surviving findings on impact, confidence, effort, reversibility and urgency, then hand the top few to a human with the checks to run. The loop stops here — the analyst never acts.
OutputA ranked shortlist of recommended checks for human review.
It is a loop, not a checklist: corroboration that fails sends the analyst back to Explain, and a failed validation sends it back to Observe with a wider window.
Five layers of SEO evidence
Each layer answers a different question, and none of them answers all four daily questions alone. Naming the layer a number came from is what stops the analyst from arguing that a session drop proves a ranking loss.
What each evidence layer can and cannot prove
Layer 1 · Before the click
Search visibility
Google's own record of impressions, clicks, CTR and position. Proves whether search demand and visibility changed. Cannot tell you what happened after the click.
Related tools
- Google Search Console
Layer 2 · After the click
Session and outcome data
Sessions, engagement and key events by landing page and channel. Proves whether arriving visitors behaved differently. Cannot prove a ranking change, and will not match search-side click counts.
Related tools
- Google Analytics 4
Layer 3 · On the page
Behavioral evidence
Session recordings, heatmaps and interaction signals for the specific pages a brief flags. Explains why a page underperforms once you already know it does. Not a sampling-free source of truth.
Related tools
- Microsoft Clarity
Layer 4 · Off-site and competitive
Third-party market estimates
Backlink change, competitor movement and keyword landscape. Useful for corroboration and context — and always an estimate, so it must never be presented in a brief as a verified fact.
Related tools
- Ahrefs
- Semrush
Layer 5 · Delivery
Field and lab performance
Real-user field data and synthetic lab data for page experience. Field evidence and lab evidence answer different questions and must stay separate in the brief.
Related tools
- Chrome UX Report
- PageSpeed Insights
Evidence chains
An evidence chain is how a finding is presented: each link is labeled as a verified fact, a calculated metric, a hypothesis or a recommended check, so a reviewer can see exactly where observation ends and inference begins. Two worked examples follow.
Clicks to a pricing page fall while impressions and position hold steady, CTR falls, and the decline is concentrated on desktop, supporting a snippet or SERP-feature hypothesis rather than a ranking hypothesis.
- 01
Organic clicks to /pricing fell 18% week over week
Search ConsoleVerified fact. Read from Search Analytics for the last 7 days against the previous 7-day baseline.
- 02
Impressions were flat at +1%
Search ConsoleVerified fact. Demand and visibility did not fall, so this is not a lost-impressions story.
- 03
Average position moved from 4.1 to 4.3
DerivedCalculated metric. Too small to account for an 18% click loss on its own; the ranking hypothesis weakens.
- 04
CTR fell from 6.4% to 5.2%, concentrated on desktop
DerivedCalculated metric. Mobile CTR was broadly unchanged, which localises the change to one device class.
- 05
A desktop SERP-feature or snippet change is suppressing clicks
UnprovenHypothesis. Competing hypothesis considered and retained as weaker: a title rewrite shipped in the same window.
Ask a human to inspect the live desktop SERP and the page's title and description before anyone edits content.
Analytics sessions drop sharply while search clicks are unchanged, and the drop starts on a deployment date, supporting a tracking hypothesis rather than an SEO hypothesis.
- 01
Organic sessions fell 41% day over day
GA4Verified fact. Read from the Data API for organic search sessions by landing page.
- 02
Search clicks for the same pages were unchanged
Search ConsoleVerified fact. Two independent sources disagree. Because they measure different stages, the disagreement is the signal.
- 03
The drop begins exactly on a release date and affects only two templates
DerivedCalculated metric. A step change on a single date rarely reflects search behavior.
- 04
Analytics tagging on those templates changed during the release
UnprovenHypothesis. Alternative hypotheses — consent-banner changes and bot filtering — are retained until the tag check returns.
Ask a human to verify tag firing on the affected templates for the deployment date before any SEO work is scheduled.
Confidence scoring
Every hypothesis carries a score from 0 to 100 and the band that score falls in. The bands are our editorial convention — they exist so “probably” means the same thing in every brief.
| Score | Band | What it means |
|---|---|---|
| 90–100 | Very high | Two or more independent primary sources agree, and no plausible alternative explanation survives. |
| 75–89 | High | One primary source plus corroborating evidence; alternatives were checked and ruled out. |
| 50–74 | Moderate | A single primary source, or corroboration that is directional rather than conclusive. |
| 25–49 | Low | Pattern-consistent but unconfirmed; competing explanations remain open. |
| 0–24 | Speculative | A hypothesis worth testing only. Never act on it without validation. |
Connector Scout confidence bands. Editorial convention, not a vendor specification.
90–100
- Band
- Very high
- What it means
- Two or more independent primary sources agree, and no plausible alternative explanation survives.
75–89
- Band
- High
- What it means
- One primary source plus corroborating evidence; alternatives were checked and ruled out.
50–74
- Band
- Moderate
- What it means
- A single primary source, or corroboration that is directional rather than conclusive.
25–49
- Band
- Low
- What it means
- Pattern-consistent but unconfirmed; competing explanations remain open.
0–24
- Band
- Speculative
- What it means
- A hypothesis worth testing only. Never act on it without validation.
| Label | What it means | What it must carry | Can it justify action? |
|---|---|---|---|
| Verified fact | Read directly from a source API. | Source, metric, window. | Yes, as evidence. |
| Calculated metric | Derived from stored source data. | The derivation and its inputs. | Yes, if the derivation is stated. |
| Hypothesis | The model's candidate explanation. | A confidence score and a test. | No — it justifies a check. |
| Recommended check | The action a human should take next. | The source that would settle it. | It is the action. |
How the brief labels every statement. Compact by design — a reviewer should read it in seconds.
Verified fact
- What it means
- Read directly from a source API.
- What it must carry
- Source, metric, window.
- Can it justify action?
- Yes, as evidence.
Calculated metric
- What it means
- Derived from stored source data.
- What it must carry
- The derivation and its inputs.
- Can it justify action?
- Yes, if the derivation is stated.
Hypothesis
- What it means
- The model's candidate explanation.
- What it must carry
- A confidence score and a test.
- Can it justify action?
- No — it justifies a check.
Recommended check
- What it means
- The action a human should take next.
- What it must carry
- The source that would settle it.
- Can it justify action?
- It is the action.
Prioritization framework
Five inputs decide what reaches the top of the brief. They are deliberately not collapsed into one score: reviewers need to see why something was ranked first, and a hidden weighting is impossible to argue with.
What the analyst weighs before it hands anything to a human
Impact
How much value is at stake if this is real?
Size it in the currency the business uses — revenue, leads, or clicks on commercially important templates — not in percentage change on a low-volume URL.
High / medium / low
Confidence
How well is the diagnosis evidenced?
Use the band the finding earned. A speculative finding with large impact is a research task; a very-high-confidence finding with modest impact may still be the better first move.
0–100 band
Effort
What will it cost to validate and to fix?
Score validation effort separately from remediation effort. Cheap validation on an uncertain finding often beats expensive work on a certain one.
Hours / days / weeks
Reversibility
How easily can the change be undone?
Title and metadata edits are near-reversible; redirect maps, template rewrites and URL migrations are not. Irreversible work needs a higher confidence bar.
Reversible / partial / one-way
Urgency
Does waiting make the outcome worse?
Compounding problems — deindexation, broken canonicals, a spreading regression — outrank stable ones of equal size. A flat decline can wait a day for better evidence.
Now / this week / backlog
Architecture#
The pipeline is the same whichever build you choose: collect read-only data on a schedule, normalize it, detect material change, diagnose it with evidence attached, brief a human, and stop there.
Three principles keep the output trustworthy. Evidence before explanation: every recommendation should be traceable to one or more verified data sources. Facts before hypotheses: the brief must separate verified facts, calculated metrics, hypotheses and recommended validation steps, and never blur them. Multiple sources beat one: a finding supported by two independent sources deserves higher confidence than a finding from a single API.
Useful pairings in practice are Search Console with GA4, Search Console with Ahrefs, GA4 with Clarity, and Search Console with Clarity and Semrush. Corroboration is what makes the difference between an analyst and a chart.
Every claim in a brief carries a label
- Verified fact — read directly from a source API
- Calculated metric — derived from stored source data
- Hypothesis — the model's explanation, marked as unproven
- Recommended validation — the check a human should run to confirm it
Collect read-only data from each source, normalize it into one comparable shape, detect material change against stored baselines, diagnose flagged deltas with evidence attached, brief a human, and stop for review.
01Collect
Read-only pulls from each official API or MCP server on a fixed schedule.
- Search Console
- GA4
- CrUX
02Normalize
Map every source into one dated, comparable metric shape.
- Shared schema
03Detect
Compare against stored baselines and apply validation rules.
- Thresholds
04Diagnose
The model investigates flagged deltas across sources before explaining them.
- MCP
- System prompt
05Brief
A short daily brief separates facts, metrics, hypotheses and checks.
- Daily brief
06Human review
A person approves anything that would change the site.
- Read-only by default
Choose Your Build#
There are two recommended architectures. Option A is an interactive AI workspace; Option B is a scheduled AI analyst. Both are legitimate — the choice depends on how repeatable and auditable the output has to be.
Option A — Interactive AI workspace suits independent consultants, small teams, experimentation and ad hoc analysis. You work in an AI chat interface, use official MCP servers where the vendor provides one, and add custom read-only tools for platforms that do not. Investigations are human-driven. It is fast to set up, flexible and needs almost no infrastructure, but it is less repeatable, depends on manual prompting, and handles historical processing poorly.
Option B — Scheduled AI analyst suits agencies, enterprise SEO, large content libraries and recurring executive reporting. Data sources feed a scheduled extraction step, then a normalized data store, then validation rules, then the LLM investigation, then the daily brief, then human review. It is repeatable, easier to audit, better at historical analysis, cheaper in API cost over time, and easier to govern.
| Criterion | Option A — Interactive workspace | Option B — Scheduled analyst |
|---|---|---|
| Best for | Consultants, small teams, experimentation, ad hoc analysis | Agencies, enterprise SEO, large content libraries, recurring reporting |
| How it runs | AI chat interface, human-driven investigations | Scheduled extraction, normalized store, validation rules, then the model |
| Setup effort | Fast; low infrastructure | Higher; a store and a scheduler |
| Repeatability | Lower — depends on manual prompting | Higher — same inputs every run |
| Auditability | Harder to reconstruct a past answer | Easier; runs and outputs are logged |
| Historical analysis | Limited historical processing | Better; baselines are stored |
| API cost over time | Grows with ad hoc querying | Lower; scheduled pulls are deduplicated |
| Write access | None — read-only tools only | None — read-only end to end |
The two recommended architectures compared.
Best for
- Option A — Interactive workspace
- Consultants, small teams, experimentation, ad hoc analysis
- Option B — Scheduled analyst
- Agencies, enterprise SEO, large content libraries, recurring reporting
How it runs
- Option A — Interactive workspace
- AI chat interface, human-driven investigations
- Option B — Scheduled analyst
- Scheduled extraction, normalized store, validation rules, then the model
Setup effort
- Option A — Interactive workspace
- Fast; low infrastructure
- Option B — Scheduled analyst
- Higher; a store and a scheduler
Repeatability
- Option A — Interactive workspace
- Lower — depends on manual prompting
- Option B — Scheduled analyst
- Higher — same inputs every run
Auditability
- Option A — Interactive workspace
- Harder to reconstruct a past answer
- Option B — Scheduled analyst
- Easier; runs and outputs are logged
Historical analysis
- Option A — Interactive workspace
- Limited historical processing
- Option B — Scheduled analyst
- Better; baselines are stored
API cost over time
- Option A — Interactive workspace
- Grows with ad hoc querying
- Option B — Scheduled analyst
- Lower; scheduled pulls are deduplicated
Write access
- Option A — Interactive workspace
- None — read-only tools only
- Option B — Scheduled analyst
- None — read-only end to end
Option B data flow
- SEO data sources
- Scheduled extraction
- Normalized data store
- Validation rules
- LLM investigation
- Daily brief
- Human review
Connection Options#
This guide classifies every integration with one of four labels, so you always know whether a capability is vendor-supported or something you are building yourself.
The labels matter for governance as much as for setup. An official MCP server is maintained by the vendor and documented publicly. A custom pipeline over an official API is your code, your credentials and your responsibility — which is fine, provided the distinction is recorded rather than assumed.
A minimum viable analyst does not need all six sources. Search Console, GA4 and Core Web Vitals data are enough to answer the four daily questions for most sites; the rest add off-site and behavioral context.
| Label | Meaning |
|---|---|
| Official MCP | Vendor-supported Model Context Protocol integration. |
| Official API | Vendor-supported API requiring your own application or pipeline. |
| Custom MCP / pipeline | Your implementation exposing official APIs to an AI client. |
| Optional | Helpful, but not required for a minimum viable analyst. |
How this guide labels every integration.
Official MCP
- Meaning
- Vendor-supported Model Context Protocol integration.
Official API
- Meaning
- Vendor-supported API requiring your own application or pipeline.
Custom MCP / pipeline
- Meaning
- Your implementation exposing official APIs to an AI client.
Optional
- Meaning
- Helpful, but not required for a minimum viable analyst.
| Platform | Classification | In a minimum build? |
|---|---|---|
| Google Search Console | Official API + custom MCP/pipeline | Yes |
| Google Analytics 4 | Official API + custom MCP/pipeline | Yes |
| Ahrefs | Official MCP + official API | Optional |
| Semrush | Official MCP + official API | Optional |
| Microsoft Clarity | Official MCP + official API | Optional |
| Core Web Vitals | Official API | Yes |
Data sources covered by this guide and how each one is reached.
Google Search Console
- Classification
- Official API + custom MCP/pipeline
- In a minimum build?
- Yes
Google Analytics 4
- Classification
- Official API + custom MCP/pipeline
- In a minimum build?
- Yes
Ahrefs
- Classification
- Official MCP + official API
- In a minimum build?
- Optional
Semrush
- Classification
- Official MCP + official API
- In a minimum build?
- Optional
Microsoft Clarity
- Classification
- Official MCP + official API
- In a minimum build?
- Optional
Core Web Vitals
- Classification
- Official API
- In a minimum build?
- Yes
Google Search Console
Query, page, country and device performance from the Search Analytics API. The primary answer to "what changed in search".
Setup: moderate effort
Search Console API — Search Analytics: query (opens in a new tab)Google Analytics 4
Behavioral context for search deltas — sessions, engagement and key events by landing page — via the Data API.
Setup: moderate effort
Google Analytics Data API (GA4) (opens in a new tab)Ahrefs
Off-site corroboration — backlink and referring-domain records plus third-party organic estimates — through the hosted Ahrefs MCP server for investigation, or Ahrefs API v3 for scheduled pulls.
Setup: moderate effort
Ahrefs MCP — introduction (opens in a new tab)Semrush
Position Tracking measurements for a keyword set you configure, backlink records, keyword demand context and — for subscribers — Traffic & Market data, through the Semrush MCP server or the Standard API.
Setup: moderate effort
Semrush MCP documentation (opens in a new tab)Microsoft Clarity
On-page behavior signals for pages the brief flags, through the Clarity MCP server or the Data Export API.
Setup: low effort
Microsoft Clarity MCP server (opens in a new tab)Core Web Vitals
Field data from the Chrome UX Report API and lab data from PageSpeed Insights, kept separate in the brief.
Setup: low effort
Chrome UX Report API (opens in a new tab)Google Search Console#
Search Console is the foundation of the analyst because it is Google's own reporting on how your site performs in Google Search. It is the primary "before the click" data source in this guide.
If the analyst only reads analytics data, it cannot tell a demand problem from a ranking problem, a CTR problem or a tracking problem. Search Console fills that gap by showing what happened in Google Search before the visitor ever reached the site, which makes it the primary evidence source whenever organic visibility changes.
Google documents three API surfaces for this work: Search Analytics for performance reporting, the URL Inspection API for the indexing and rich-results state of a single URL, and the Sitemaps API for sitemap submission and status. Treat those references as the authoritative description of what the platform provides.
Questions the analyst should be able to answer from Search Console alone
- Which pages gained or lost clicks?
- Which queries changed?
- Did impressions change?
- Did average position change?
- Did CTR change?
- Which devices were affected?
- Which countries were affected?
- Is the change isolated to a few URLs or site-wide?
Recommended metrics and dimensions
Capture clicks, impressions, CTR and average position for every run, and request the page, query, country, device and date dimensions so a change can be sliced without a second round trip. The metric set is fixed by the Search Analytics API; which dimensions you store daily is our recommendation.
Daily workflow
Each daily run compares the current reporting window with an appropriate historical baseline. The investigations below are editorial recommendations, not Google requirements, and each one is a ranked list rather than a single number.
Suggested daily investigations
- Largest click declines
- Largest click gains
- Largest impression declines
- Largest CTR declines
- Largest ranking changes
- Emerging queries
- Declining queries
Investigation pattern
Never start a traffic investigation in GA4. Establish first whether search visibility changed; if impressions and clicks are stable, the root cause is probably elsewhere.
When a page loses traffic
- Confirm the click decline against the stored baseline.
- Check impressions to separate lost demand from lost visibility.
- Check average position for a ranking shift.
- Check CTR for a snippet or SERP-feature effect.
- Compare the affected queries, not just the page total.
- Escalate to GA4, Ahrefs, Semrush or Clarity for corroboration before recommending anything.
Common mistakes
Each of these skips a step. Gather evidence from more than one source before the analyst recommends an action.
Assumptions the brief must not make
- Fewer sessions automatically means rankings dropped.
- Average position alone explains a traffic change.
- A CTR decline always calls for rewriting titles.
Data quality notes
Account for reporting latency, for the aggregation and anonymisation characteristics Google documents for the Performance report, and for the fact that Search Console and analytics tools measure different stages of the journey. Do not expect Search Console clicks to match GA4 sessions, and do not let the analyst treat the difference as a finding.
What a good finding looks like
Finding: organic clicks to /pricing declined 18% week over week. Evidence: impressions remained stable, average position changed minimally, CTR declined, and desktop saw the largest drop. Recommendation: review search snippets, title tags and recent SERP changes before considering content revisions.
The shape matters as much as the content — a labeled fact, the corroborating evidence behind it, and a recommendation that names a check rather than a change.
| Metric | Why it matters |
|---|---|
| Clicks | Organic traffic from Google Search. |
| Impressions | Search demand and visibility. |
| CTR | Snippet performance. |
| Average position | Ranking trend indicator. |
Metrics to capture on every Search Console run.
Clicks
- Why it matters
- Organic traffic from Google Search.
Impressions
- Why it matters
- Search demand and visibility.
CTR
- Why it matters
- Snippet performance.
Average position
- Why it matters
- Ranking trend indicator.
Recommended dimensions
- Page
- Query
- Country
- Device
- Date
Google Analytics 4#
Search Console answers "how did users find us?". GA4 answers "what happened after they arrived?". It is the behavioral layer of the investigation — engagement, key events and business outcomes rather than search visibility.
An analyst that reads only search data can tell you that clicks fell. It cannot tell you whether the visitors who did arrive found what they came for, whether a template change broke a form, or whether a traffic gain reached anything the business cares about. GA4 supplies that half of the story, and only that half: it has no view of impressions, queries or ranking.
GA4 is event-based rather than session-based. Everything it records — a page view, a scroll, a click, a purchase — is an event with parameters, and sessions are derived from those events rather than the other way round. That single fact changes how the analyst should query it: you are asking which interactions occurred and how often, not how long someone stayed on a site.
Everything stated about GA4's behavior, metric definitions, reports and limits in this section comes from Google's own Analytics Help and Data API documentation, linked at the end of the section. The investigation workflows, diagnostic patterns and checklists are Connector Scout editorial guidance and are labeled as such.
What GA4 measures: the event model
GA4 records interactions as events with parameters, and derives sessions from those events. Google documents four event categories: automatically collected events such as page_view, session_start, first_visit and user_engagement; enhanced measurement events such as scroll, outbound click, site search, video engagement and form interactions, which are toggled in the interface rather than coded; recommended events such as purchase, which have documented names and parameters but are not sent automatically; and custom events you define yourself.
| Category | Documented examples | What the analyst does with it |
|---|---|---|
| Automatically collected | page_view, session_start, first_visit, user_engagement | Baseline traffic and engagement. Present without any tagging work beyond installing the Google tag. |
| Enhanced measurement | scroll, outbound_click, site_search, video engagement, form_start and form_submit | On-page behavior that needs no code, but is toggled per data stream — confirm which toggles are on before trusting an absence of data. |
| Recommended | purchase and the other events Google names for a vertical | Documented names and parameters for common business actions. Not sent automatically; they need implementing. |
| Custom | Events you define for interactions specific to your business | Everything the standard set does not cover. Google's own guidance is to check the event is not already collected before creating one. |
The four event categories GA4 documents, and what each one gives the analyst.
Automatically collected
- Documented examples
- page_view, session_start, first_visit, user_engagement
- What the analyst does with it
- Baseline traffic and engagement. Present without any tagging work beyond installing the Google tag.
Enhanced measurement
- Documented examples
- scroll, outbound_click, site_search, video engagement, form_start and form_submit
- What the analyst does with it
- On-page behavior that needs no code, but is toggled per data stream — confirm which toggles are on before trusting an absence of data.
Recommended
- Documented examples
- purchase and the other events Google names for a vertical
- What the analyst does with it
- Documented names and parameters for common business actions. Not sent automatically; they need implementing.
Custom
- Documented examples
- Events you define for interactions specific to your business
- What the analyst does with it
- Everything the standard set does not cover. Google's own guidance is to check the event is not already collected before creating one.
Above that sits the concept the brief should actually lead with. Google documents a key event as an event that measures an action particularly important to the success of the business, and states that any event you collect can become a key event: you create or identify the event, then mark it as key. Google also documents that historical conversion data remains available as key-event data, so year-over-year comparisons still work for events that were already being collected. What does not exist is data for an event that was never collected — an event first configured on Tuesday has nothing before Tuesday — and Google Ads conversions shared with Analytics have no historical data associated with them.
GA4 in the evidence layer
GA4 is layer two of the five evidence layers described earlier in this guide: the behavioral layer. It proves what visitors did. It cannot prove why they did it, and it has no view of search visibility at all.
| Source | Primary question | What it cannot tell you |
|---|---|---|
| Google Search Console | Can users find the page? | Whether anyone who arrived did anything useful. |
| Google Analytics 4 | Do users find value once they arrive? | Why they behaved that way, or how visible the page was in search. |
| Microsoft Clarity | Why do they behave this way on the page? | Whether the pattern is site-wide or affects outcomes at scale. |
| Ahrefs / Semrush | How competitive is the topic, and what changed off-site? | Anything about your own users; these are third-party estimates. |
| Core Web Vitals (CrUX / PSI) | Is page performance plausibly affecting behavior? | Whether performance caused a specific engagement change. |
The primary question each evidence source answers. Connector Scout framing; the underlying capabilities are vendor-documented.
Google Search Console
- Primary question
- Can users find the page?
- What it cannot tell you
- Whether anyone who arrived did anything useful.
Google Analytics 4
- Primary question
- Do users find value once they arrive?
- What it cannot tell you
- Why they behaved that way, or how visible the page was in search.
Microsoft Clarity
- Primary question
- Why do they behave this way on the page?
- What it cannot tell you
- Whether the pattern is site-wide or affects outcomes at scale.
Ahrefs / Semrush
- Primary question
- How competitive is the topic, and what changed off-site?
- What it cannot tell you
- Anything about your own users; these are third-party estimates.
Core Web Vitals (CrUX / PSI)
- Primary question
- Is page performance plausibly affecting behavior?
- What it cannot tell you
- Whether performance caused a specific engagement change.
Primary questions the analyst answers with GA4
- Did the visitors who arrived engage, or did they leave immediately?
- Which landing pages absorb traffic well, and which lose it?
- Which pages carry disproportionate business value?
- Did the acquisition mix change, and did quality change with it?
- Where in the journey do users drop off before a key event?
- Did the outcome the business cares about move, or only the traffic?
- Is this a behavior change at all, or a measurement change dressed up as one?
Core reports and the questions they answer
The distinction that matters most here is traffic acquisition versus user acquisition. Google documents the traffic acquisition report as showing where new and returning users come from, and the user acquisition report as showing how new users found the site for the first time. They disagree by design, and an analyst that treats the difference as an error will keep filing false discrepancies.
| Report | Question it answers | Analyst note |
|---|---|---|
| Traffic acquisition | Where do new and returning users come from? | Session-scoped. This is the report to use when asking whether an organic session change is isolated to organic. |
| User acquisition | How did new users find the site for the first time? | User-scoped first-touch. Divergence from traffic acquisition is a returning-visitor story, not a discrepancy. |
| Landing page | Which page did the visit start on, and how many visits started there? | The join point with Search Console. Search-side page data and GA4 landing pages describe the same entry URL. |
| Pages and screens | Which individual pages and app screens were viewed? | All views, not entrances. Useful for internal-journey questions, misleading if read as arrival data. |
| Events | How many times was each event triggered, and by how many users? | Confirms whether measurement itself changed — a missing event is often a tagging incident, not a behavior change. |
| Key events | Did the actions the business cares about happen? | Any collected event can be marked as a key event. Historical conversion data remains available as key-event data, so year-over-year comparison is possible; a newly created event only has data from the point collection began. |
| Explorations | Can I interrogate a hypothesis beyond a standard report? | Ad hoc techniques for a human, not a stable daily feed. Keep scheduled runs on the API. |
Standard GA4 reports, framed by the investigation question each answers.
Traffic acquisition
- Question it answers
- Where do new and returning users come from?
- Analyst note
- Session-scoped. This is the report to use when asking whether an organic session change is isolated to organic.
User acquisition
- Question it answers
- How did new users find the site for the first time?
- Analyst note
- User-scoped first-touch. Divergence from traffic acquisition is a returning-visitor story, not a discrepancy.
Landing page
- Question it answers
- Which page did the visit start on, and how many visits started there?
- Analyst note
- The join point with Search Console. Search-side page data and GA4 landing pages describe the same entry URL.
Pages and screens
- Question it answers
- Which individual pages and app screens were viewed?
- Analyst note
- All views, not entrances. Useful for internal-journey questions, misleading if read as arrival data.
Events
- Question it answers
- How many times was each event triggered, and by how many users?
- Analyst note
- Confirms whether measurement itself changed — a missing event is often a tagging incident, not a behavior change.
Key events
- Question it answers
- Did the actions the business cares about happen?
- Analyst note
- Any collected event can be marked as a key event. Historical conversion data remains available as key-event data, so year-over-year comparison is possible; a newly created event only has data from the point collection began.
Explorations
- Question it answers
- Can I interrogate a hypothesis beyond a standard report?
- Analyst note
- Ad hoc techniques for a human, not a stable daily feed. Keep scheduled runs on the API.
Google also documents a Search Console integration for GA4 that surfaces two reports — Google Organic Search Queries and Google Organic Search Traffic — once a property is linked. It is a convenience for human review, not a substitute for reading the Search Console API directly, which is where Part 2 of this guide gets its evidence.
Important metrics, and when each one lies
Metric definitions come from Google’s documentation, and each badge shows the Data API metric name from the official GA4 schema — which does not always match the interface wording (the UI’s Average engagement time is derived from the API’s userEngagementDuration, and the API’s current outcome metric is keyEvents). The failure modes are Connector Scout editorial guidance — a metric without a stated failure mode is how a brief ends up claiming a number proves something it cannot.
GA4 metrics an analyst should read together, never alone
Sessions
sessions- Measures
- Visits to the site or app, derived from the events GA4 collects rather than counted directly.
- Why it matters
- The denominator for most rate metrics, and the closest GA4 analogue to a search-side click.
- Misleading when
- Read as equivalent to Search Console clicks. The two count different stages of the journey and will not match.
AnswersDid the volume of visits change at all?
Total users / active users
totalUsers, activeUsers- Measures
- Distinct users, and users with an engaged session, over the requested window.
- Why it matters
- Separates a traffic change from the same people visiting more often.
- Misleading when
- Compared across windows of different lengths, or treated as people rather than as identifiers GA4 could resolve.
AnswersAre we reaching more people, or the same people more often?
Engaged sessions
engagedSessions- Measures
- Sessions that lasted longer than 10 seconds, or had a key event, or had 2 or more screen or page views — any one of the three qualifies.
- Why it matters
- The cheapest available proxy for whether arriving visitors got something out of the page.
- Misleading when
- Applied to a page whose job is answered instantly. A correct one-screen answer that takes eight seconds is not a failure.
AnswersDid visitors engage, or did they arrive and leave?
Engagement rate
engagementRate- Measures
- Engaged sessions divided by sessions. Google documents bounce rate as the exact opposite of this metric, and the Data API returns the rate as a fraction.
- Why it matters
- Normalizes engagement so a traffic gain and a quality decline can be told apart.
- Misleading when
- Compared across pages with different intent, or when a mix shift — new channel, new country — changes the population rather than the content.
AnswersDid the quality of the visit change, independent of volume?
Average engagement time (UI)
userEngagementDuration- Measures
- The Data API returns
userEngagementDuration— total time, in seconds, the app was in the foreground or the website in focus, sent by the Google tag in anengagement_time_msecparameter. The interface's Average engagement time divides that total by users; the API leaves the division to you. - Why it matters
- Focus-based timing, so background tabs do not inflate it the way older session-duration metrics did.
- Misleading when
- Treated as reading time, quoted as an average straight from the API without dividing by users or sessions, or used on pages where a single measured event ends the session and truncates the timing.
AnswersDid visitors spend meaningfully less time with the content?
Views
screenPageViews- Measures
- Total page and screen views, including repeat views within a session.
- Why it matters
- Distinguishes an entrance problem from an internal-navigation problem.
- Misleading when
- Substituted for landing-page entrances when diagnosing a search-driven change.
AnswersDid consumption change, or only arrivals?
Event count
eventCount- Measures
- How many times events were triggered, filterable by event name.
- Why it matters
- The measurement-integrity check. A collapse in one event name with everything else stable usually means tagging, not behavior.
- Misleading when
- Summed across event names as if the total meant anything. Event volume is a function of what you chose to measure.
AnswersIs this a behavior change or a tracking change?
Key events
keyEvents- Measures
- The count of events marked as key — Google's current name for the important Analytics events previously labeled conversions. Any collected event can be marked as one. In the Data API,
keyEventsis the metric name;conversionsremains as a deprecated alias. - Why it matters
- The closest GA4 metric to a business outcome, and the one a brief should lead with.
- Misleading when
- Read across a period in which the key-event definition changed. Historical conversion data is available as key-event data, so year-over-year comparison works for events that were already being collected — but an event created last Tuesday has no data before last Tuesday, and Google Ads conversions shared with Analytics carry no historical data at all.
AnswersDid the outcome the business cares about actually move?
Total revenue
totalRevenue- Measures
- Revenue from purchase and other monetisation events, where ecommerce measurement is implemented.
- Why it matters
- Ends the argument about whether a traffic change mattered.
- Misleading when
- Read on a site with partial ecommerce implementation, or attributed to organic search without checking the channel dimension.
AnswersDid the change reach the bottom of the funnel?
Documented data-quality constraints
Four documented behaviors produce most of the false alarms we see in automated GA4 reporting. They are separate mechanisms and should not be conflated: processing latency, sampling in explorations and ad-hoc queries, cardinality and the (other) row, and system-defined thresholding. Encode each in the pipeline rather than hoping the model notices.
- Data freshness
- Google documents that data processing can take 24–48 hours and that data in reports may change during that time. Realtime data arrives within minutes, standard intraday within 2–6 hours, and Analytics 360 has shorter intervals. A daily analyst that reads yesterday and treats it as final will manufacture declines.
- Sampling in explorations and ad-hoc queries
- Sampling is documented as an explorations and ad-hoc query behavior: Google's configuration limits state 10M events per query for explore sampling and that ad-hoc queries processing beyond 10M events will be sampled, while standard queries are not affected by this limit. Do not describe every Data API report as sampled past 10 million events; the Data API has its own separate quota system.
- Cardinality and the (other) row
- Google defines high-cardinality dimensions as those with more than 500 unique values in a day and documents that they make a report more likely to hit its row limit, condensing the remainder into a row labeled (other). Page path on a large site is the usual trigger, and stricter cardinality limits can apply while only intraday data is available.
- Data thresholds
- Google documents system-defined thresholds that withhold data from a report, exploration or API call — typically where demographic, audience or search-query data is involved and there are not enough users. Withheld rows are not zeros, and a narrow date range makes thresholding more likely. The data-quality indicator in the interface reports when it has been applied.
Investigation workflows
Two worked chains, following the same evidence-labeling convention as the mindset chapter: each link is a verified fact, a calculated metric, a hypothesis or a recommended check.
Search Console impressions and clicks are unchanged while GA4 engagement rate, average engagement time and key events all fall, pointing at content or user experience rather than search.
- 01
Search Console impressions unchanged
GSC · flatVerified fact. Search demand and visibility for the affected URLs held flat against the stored baseline.
- 02
Search Console clicks unchanged
GSC · flatVerified fact. CTR and average position moved within normal variance, so the search-side journey is intact.
- 03
GA4 engagement rate down
GA4 · downCalculated metric. Engaged sessions divided by sessions fell for the same landing pages over the same window. Same visitors arriving, fewer of them qualifying as engaged.
- 04
GA4 average engagement time down
GA4 · downCalculated metric. Focus time per session declined alongside the rate, so this is not a single-threshold artefact.
- 05
GA4 key events down
GA4 · downVerified fact. The outcome the business cares about fell too, with no key-event definition change in the window to explain it.
- 06
Event count for the affected events is stable
GA4 · flatVerified fact. Tagging is intact — the events are still firing at normal volume elsewhere, so this is behavior rather than measurement.
Search visibility is healthy; content quality or on-page experience most likely changed. Recommended next check: compare the affected templates against recent deploys, then look at Clarity for the page-level behavior before recommending any content change.
Sessions and download key events rose while revenue stayed flat, isolating the problem to the conversion step rather than acquisition.
- 01
GA4 sessions up
GA4 · upVerified fact. Organic sessions to the affected landing pages rose against the baseline.
- 02
Download key event up
GA4 · upVerified fact. The mid-funnel key event rose roughly in proportion to sessions, so the new traffic behaves like the old traffic.
- 03
Total revenue unchanged
GA4 · flatVerified fact. Monetisation events did not move, and the ecommerce implementation was unchanged in the window.
- 04
Traffic acquisition shows the gain is concentrated in one channel
GA4 · localizedVerified fact. The increase is not spread evenly, which makes an intent difference a live explanation rather than an afterthought.
Top-of-funnel content improved; bottom-of-funnel conversion needs investigation. Recommended next check: confirm the new sessions match the intent the money pages serve — the honest alternative explanation is that the added traffic was never going to convert, which is a targeting finding, not a conversion-rate problem.
Common diagnostic patterns
Recurring shapes in the data, the explanation each usually supports, and the check that settles it. This is Connector Scout editorial guidance built on the documented GA4 behaviors above.
GA4 diagnostic pattern library
Measurement incident, not a behavior change
Confidence 72% — Moderate confidence- GA4: one event name decreased
- GA4: sessions unchanged
- GSC: clicks unchanged
- Usually means
- A tag, consent banner or enhanced-measurement toggle changed, so the event stopped being collected while behavior carried on unchanged.
- Rule out first
- A genuine collapse in that specific interaction — check whether related events on the same page also moved.
- Next check
- Read the Events report for the exact event name and date of the break, then confirm the enhanced-measurement settings for that data stream.
Mix shift masquerading as a quality decline
Confidence 68% — Moderate confidence- GA4: engagement rate decreased
- GA4: sessions increased
- GA4: key events unchanged
- Usually means
- New traffic with different intent diluted the rate. The existing audience behaved the same; the population changed.
- Rule out first
- An actual content regression, which would show engagement falling within a stable channel and country.
- Next check
- Segment engagement rate by channel, landing page and country before concluding anything about content quality.
Search-side cause, GA4 symptom
Confidence 82% — High confidence- GSC: impressions decreased
- GA4: sessions decreased
- GA4: engagement rate unchanged
- Usually means
- Visibility fell and fewer people arrived, but those who did behaved normally — the GA4 decline is downstream of a search change.
- Next check
- Return to Search Console for the query and position detail. The GA4 numbers are corroboration here, not the finding.
Cardinality artefact
Confidence 74% — Moderate confidence- GA4: a page-path row decreased
- GA4: the (other) row increased
- Usually means
- The dimension exceeded the table row limit, so real traffic was folded into (other). Nothing about behavior changed.
- Next check
- Re-run the query with a narrower date range or a filtered page set, and flag the (other) row in any brief that quotes page-level GA4 numbers.
Freshness artefact
Confidence 86% — High confidence- GA4: yesterday's sessions decreased
- GA4: the prior week unchanged
- Usually means
- The most recent day is still processing. Google documents 24–48 hours for processing, during which reported figures can change.
- Next check
- Exclude the incomplete window from comparisons, or re-read the same window a day later before raising an alert.
Combining GA4 with other evidence
The landing page is the join key. Search Console reports on the page that appeared in search results; GA4 reports on the page a visit started on. Store both against the same URL and a single question becomes answerable in one pass: did fewer people arrive, or did the people who arrived behave differently?
AI analyst checklist — behavioral investigation
01Start with the business question
Not with a metric that happened to move.
- State which of the four daily questions this run is answering.
- Name the outcome — a key event, revenue, a qualified lead — that would make the change matter.
- Write down the window and the baseline before looking at any number.
02Verify discoverability in Search Console first
- Check impressions and clicks for the affected URLs before opening GA4.
- If search visibility moved, treat GA4 as corroboration rather than as the finding.
03Validate behavior in GA4
- Confirm the window is not still processing, and exclude incomplete days.
- Read sessions, engagement rate, average engagement time and key events together, never one alone.
- Check event count for the specific events involved to rule out a measurement incident.
- Segment by channel and landing page to separate a mix shift from a quality change.
- Note whether an (other) row or a withheld threshold row affects the figures you are quoting.
04Investigate user experience only for pages the data flagged
- Take the flagged landing pages to Clarity for page-level behavior.
- Check field performance data where a speed or layout regression is plausible.
05Corroborate before recommending
- Require a second evidence layer before confidence rises above Moderate.
- Label every link in the chain as a verified fact, a calculated metric, a hypothesis or a recommended check.
- Recommend a check, not a change, whenever the cause is still a hypothesis.
Common mistakes
Best practices
Key takeaway
Ahrefs#
Search Console and GA4 are first-party: they describe your search performance and your visitors. Ahrefs is the off-site layer — third-party crawl records and modelled estimates that tell the analyst what changed outside your own property, and how the competitive field looks.
Ahrefs earns its place in a daily analyst for one reason: some declines have no first-party explanation. Impressions fall, engagement is unchanged, nothing shipped — and the only remaining explanation lives outside the site, in links that disappeared or competitors that moved. Ahrefs is where that evidence is found, and it is the only layer in this guide that is not measuring your own users.
That also makes it the layer most easily over-read. Ahrefs backlink records come from Ahrefs' own crawl, and its traffic and traffic-value figures are estimates that Ahrefs models from keyword rankings — neither is Google data and neither can override Search Console. This chapter treats counts of crawled links as observations, and everything traffic-shaped as an estimate that must be labeled as one.
Every product, endpoint, plan and pricing claim below comes from Ahrefs' own documentation, linked at the end of the section. The daily-versus-weekly split, the interpretation rules, the diagnostic patterns and the confidence caps are Connector Scout editorial guidance and are labeled as such.
What Ahrefs contributes to the evidence model
Ahrefs sits in the off-site layer: third-party crawl records of links and modelled estimates of organic performance. It corroborates first-party findings and explains declines that have no on-site cause. It never measures your search performance or your users, so it cannot overrule Search Console or GA4.
MCP for investigation, API v3 for schedules
| Route | What Ahrefs documents | Use it for (editorial) |
|---|---|---|
| Hosted remote MCP server | A hosted MCP server that lets supported AI tools access Ahrefs API data. Streamable HTTP endpoint https://api.ahrefs.com/mcp/mcp is recommended; the legacy SSE endpoint https://api.ahrefs.com/mcp/mcpSse is deprecated in many tools. Available on paid plans starting from Lite, with plan-specific row limits and monthly API units. Ahrefs states the external MCP endpoint is not a general-purpose programmatic API, and that using it via custom scripts, bridges or standalone HTTP/JSON-RPC clients is unsupported and not permitted. | Interactive investigation inside a supported AI client — the follow-up questions a human asks after the brief flags something off-site. |
| Ahrefs API v3 | The current public API, covering Site Explorer, Keywords Explorer, SERP Overview, Rank Tracker, Site Audit, Batch Analysis, Brand Radar, Social Media Management, Management, subscription/usage and public endpoints. Available on eligible paid plans; other plans get a limited set of free test queries. Most paid requests consume API units. Ahrefs names it the supported route for programmatic access. | Every scheduled pull in the daily pipeline: fixed field sets, small row counts, stored against a baseline. |
The two documented ways to reach Ahrefs data. Product facts from Ahrefs documentation; the 'use it for' column is Connector Scout editorial guidance.
Hosted remote MCP server
- What Ahrefs documents
- A hosted MCP server that lets supported AI tools access Ahrefs API data. Streamable HTTP endpoint https://api.ahrefs.com/mcp/mcp is recommended; the legacy SSE endpoint https://api.ahrefs.com/mcp/mcpSse is deprecated in many tools. Available on paid plans starting from Lite, with plan-specific row limits and monthly API units. Ahrefs states the external MCP endpoint is not a general-purpose programmatic API, and that using it via custom scripts, bridges or standalone HTTP/JSON-RPC clients is unsupported and not permitted.
- Use it for (editorial)
- Interactive investigation inside a supported AI client — the follow-up questions a human asks after the brief flags something off-site.
Ahrefs API v3
- What Ahrefs documents
- The current public API, covering Site Explorer, Keywords Explorer, SERP Overview, Rank Tracker, Site Audit, Batch Analysis, Brand Radar, Social Media Management, Management, subscription/usage and public endpoints. Available on eligible paid plans; other plans get a limited set of free test queries. Most paid requests consume API units. Ahrefs names it the supported route for programmatic access.
- Use it for (editorial)
- Every scheduled pull in the daily pipeline: fixed field sets, small row counts, stored against a baseline.
Connecting, plans and API units
Connecting a supported AI client to the hosted MCP server presents an authorization consent screen and creates a dedicated API key tagged with MCP scope; workspace admins can set a monthly API-unit limit for each key. The recommended Streamable HTTP endpoint is https://api.ahrefs.com/mcp/mcp, and the SSE endpoint https://api.ahrefs.com/mcp/mcpSse is legacy.
How a request is priced
Units are non-refundable
Documented efficiency guidance
Plans, keys and limits
Endpoints worth wiring
| Endpoint | Question it answers | Output type |
|---|---|---|
| Site Explorer — Metrics (`/site-explorer/metrics`) | How large is this target's organic footprint, and how does a competitor's compare? | Estimate. Returns estimated monthly organic traffic and traffic value (both documented as estimates), plus organic keyword counts, keywords in the top 3, and the equivalent paid metrics. |
| Site Explorer — Backlinks stats (`/site-explorer/backlinks-stats`) | Did the link and referring-domain totals for this target change? | Count of Ahrefs crawl records. Returns live backlinks, live referring domains, all-time backlinks and all-time referring domains, reported for a requested date. |
| Site Explorer — Backlinks (`/site-explorer/all-backlinks`) | Which specific links exist, appeared or were lost for this target? | Link-level Ahrefs crawl records. Supports target scope (exact, prefix, domain, subdomains), aggregation, a history window, ordering, filtering and selected fields, and returns attributes including source and target URL, anchor, first seen, last seen, lost and new flags, follow/nofollow and redirect flags, and quality fields where selected. |
| Site Explorer — Best pages by backlinks (`/site-explorer/pages-by-backlinks`) | Which of my pages carry the link equity, and which of them lost links? | Counts per page from Ahrefs' crawl: inbound links to the target page, referring domains, new and lost links for the selected window, dofollow and nofollow counts, and URL-rating fields where selected. |
| Site Explorer — Anchors (`/site-explorer/anchors`) | How is the link profile described, and did that description shift? | Counts per anchor: inbound backlinks and referring domains for a given anchor, plus new and lost links across the selected history window. |
| Site Explorer — Broken backlinks (`/site-explorer/broken-backlinks`) | Which inbound links point at something that no longer resolves? | Broken backlink records for the target — the closest thing in this chapter to an actionable list, because a recoverable link is a concrete task. |
High-value Site Explorer endpoints, the question each answers, and how the output must be labeled in a brief.
Site Explorer — Metrics (`/site-explorer/metrics`)
- Question it answers
- How large is this target's organic footprint, and how does a competitor's compare?
- Output type
- Estimate. Returns estimated monthly organic traffic and traffic value (both documented as estimates), plus organic keyword counts, keywords in the top 3, and the equivalent paid metrics.
Site Explorer — Backlinks stats (`/site-explorer/backlinks-stats`)
- Question it answers
- Did the link and referring-domain totals for this target change?
- Output type
- Count of Ahrefs crawl records. Returns live backlinks, live referring domains, all-time backlinks and all-time referring domains, reported for a requested date.
Site Explorer — Backlinks (`/site-explorer/all-backlinks`)
- Question it answers
- Which specific links exist, appeared or were lost for this target?
- Output type
- Link-level Ahrefs crawl records. Supports target scope (exact, prefix, domain, subdomains), aggregation, a history window, ordering, filtering and selected fields, and returns attributes including source and target URL, anchor, first seen, last seen, lost and new flags, follow/nofollow and redirect flags, and quality fields where selected.
Site Explorer — Best pages by backlinks (`/site-explorer/pages-by-backlinks`)
- Question it answers
- Which of my pages carry the link equity, and which of them lost links?
- Output type
- Counts per page from Ahrefs' crawl: inbound links to the target page, referring domains, new and lost links for the selected window, dofollow and nofollow counts, and URL-rating fields where selected.
Site Explorer — Anchors (`/site-explorer/anchors`)
- Question it answers
- How is the link profile described, and did that description shift?
- Output type
- Counts per anchor: inbound backlinks and referring domains for a given anchor, plus new and lost links across the selected history window.
Site Explorer — Broken backlinks (`/site-explorer/broken-backlinks`)
- Question it answers
- Which inbound links point at something that no longer resolves?
- Output type
- Broken backlink records for the target — the closest thing in this chapter to an actionable list, because a recoverable link is a concrete task.
| Cadence | What to pull | Why |
|---|---|---|
| Daily or alert-triggered | Backlink and referring-domain totals for a short list of priority domains and pages; newly found and lost links for pages the brief has already flagged; broken backlinks for high-value pages; the subscription limits and usage endpoint. | Small, fixed row counts against a known target list. This is enough to notice an off-site change and nothing more — the investigation itself happens interactively. |
| Weekly or on demand | Broad backlink inventories, anchor distributions, pages by backlinks, competitor organic estimates, keyword and market exploration, Site Audit, Brand Radar and SERP pulls. | These answer strategic questions that do not change daily, and they are the pulls that return thousands of rows. |
Connector Scout editorial guidance: what a daily analyst should pull from Ahrefs, and what belongs in a weekly or on-demand pass.
Daily or alert-triggered
- What to pull
- Backlink and referring-domain totals for a short list of priority domains and pages; newly found and lost links for pages the brief has already flagged; broken backlinks for high-value pages; the subscription limits and usage endpoint.
- Why
- Small, fixed row counts against a known target list. This is enough to notice an off-site change and nothing more — the investigation itself happens interactively.
Weekly or on demand
- What to pull
- Broad backlink inventories, anchor distributions, pages by backlinks, competitor organic estimates, keyword and market exploration, Site Audit, Brand Radar and SERP pulls.
- Why
- These answer strategic questions that do not change daily, and they are the pulls that return thousands of rows.
Reading Ahrefs metrics
Ahrefs metrics an analyst reads daily — definition from Ahrefs documentation, failure mode from Connector Scout
Live referring domains
live_refdomains- Measures
- Documented as the total number of unique domains linking to your target, reported for the date you request.
- Why it matters
- The steadiest off-site signal there is. Unique domains move slowly, so a genuine drop is worth reading, where a raw link-count drop often is not.
- Misleading when
- Read as a Google-visible fact. It is a count of what Ahrefs' crawler currently has on record, and crawl coverage and recrawl timing differ from Google's.
AnswersDid anything change in who links to us?
Live backlinks
live- Measures
- Documented as the total number of links from other websites pointing to your target, alongside all-time totals for links and referring domains.
- Why it matters
- Gives the scale of the profile and the size of any movement relative to it. All-time versus live is the difference between what ever existed and what Ahrefs currently sees.
- Misleading when
- A single site-wide template link changes on a large referring domain and thousands of backlinks move without a single referring domain changing. Lead with domains, not links.
Estimated organic traffic
org_traffic (10 units)- Measures
- Documented as the estimated number of monthly visitors that your target gets from organic search.
- Why it matters
- The only way to size a competitor's search performance, since you have no first-party access to their analytics.
- Misleading when
- Applied to your own property. You have Search Console and GA4 for that, and a model of your traffic must never contradict a measurement of it. Also one of the expensive fields, at 10 units per row.
AnswersHow big is this competitor in organic search, roughly?
Estimated organic traffic value
org_cost (10 units)- Measures
- Documented as the estimated value of your target's monthly organic search traffic, in USD cents.
- Why it matters
- Converts a visibility difference into a number a stakeholder can weigh against paid spend.
- Misleading when
- Quoted as revenue. It is an estimate derived from another estimate — modelled traffic priced at modelled keyword costs — so give it a range and a label, never a decimal place.
Organic keywords and keywords in positions 1–3
org_keywords / org_keywords_1_3- Measures
- Documented as the total number of keywords the target ranks for in the top 100 organic results, and the number in the top 3.
- Why it matters
- Movement in the top-3 count is a cleaner competitive signal than total keywords, which drifts with database coverage.
- Misleading when
- Compared across time without accounting for Ahrefs' own index growth. Rising totals for everyone in a market is a coverage story, not a market story.
First seen / first seen link
first_seen / first_seen_link- Measures
- Documented as the date the referring page URL was first discovered, and the date Ahrefs first found a backlink to your target on that referring page.
- Why it matters
- The only timestamp available on a link, and the field a 'new links' alert is built on.
- Misleading when
- Treated as a publication date. Connector Scout interpretation: discovery is a crawl event, so a newly discovered backlink is not necessarily a newly created one — the link may have existed for months before Ahrefs reached the page.
AnswersWhen did we learn about this link — not when was it built?
Lost links
lost_links_to_target / is_lost- Measures
- Documented per page and per anchor as the number of backlinks lost during the selected time period, with a per-link
is_lostflag and alast_seendate describing when the link was discovered to be lost. - Why it matters
- The single most useful off-site alert, because a concentrated loss on one page is a testable hypothesis rather than noise.
- Misleading when
- Read as removal. Connector Scout interpretation: a redirect change, a canonical change, source downtime at crawl time, or ordinary recrawl timing all produce lost records too, so every lost link needs manual validation before it is reported as a cause.
Domain Rating and URL Rating
domain_rating_source / url_rating_target- Measures
- Ahrefs metrics describing the strength of a domain's or page's backlink profile relative to other sites in the Ahrefs database.
- Why it matters
- A quick, consistent way to sort which lost or gained links are worth a human's attention first.
- Misleading when
- Presented as a Google ranking factor. They are Ahrefs' own scores; a change in either causes nothing, and the analyst must never write a sentence in which DR moves rankings.
Data quality and interpretation limits
Third-party data, not ground truth
Estimates must carry the word 'estimated'
Discovery timing is not publication timing
Lost links are hypotheses until validated
No causal claims from off-site metrics
Worked evidence chains
Search Console clicks and positions fall for one page while Ahrefs shows lost referring domains concentrated on that same URL, making backlink loss the leading hypothesis — pending a manual check.
- 01
Search Console clicks down for one URL
GSC · downThe decline is isolated to a single page rather than spread across the section, so a site-wide or seasonal explanation is already weaker.
- 02
Average position for its head queries declined
GSC · downImpressions fell with clicks and position moved, so this is a visibility change rather than a snippet or CTR change.
- 03
No deploy, content edit or robots change in the window
Internal · flatThe obvious first-party causes are eliminated before any third-party data is opened.
- 04
Ahrefs live referring domains down for the domain
Ahrefs · downThe backlinks-stats endpoint reports fewer live referring domains than the stored baseline for the same dates.
- 05
Lost links concentrated on the affected page
Ahrefs · localizedBest pages by backlinks shows the lost-links count for the window sitting almost entirely on the declining URL, not spread across the site.
- 06
Backlink loss is the leading explanation
HypothesisTwo independent layers moved together on the same URL, in the same window, with first-party causes ruled out.
- 07
Fetch the top lost referring pages by hand
CheckConfirm whether each link was genuinely removed, redirected, made nofollow, or whether the source was simply unreachable when Ahrefs crawled it.
ConclusionReport it as: rankings for this URL declined, and Ahrefs shows referring-domain loss concentrated on the same URL over the same window. Recommended next check: manually verify the highest-rated lost links before any outreach or reclamation work is scheduled. Do not write that the lost links caused the ranking drop — write that they are the leading explanation and name the check that would confirm it.
Two independent layers agree and the internal causes were eliminated, but the off-site layer is third-party crawl data and the lost records are unvalidated. Connector Scout rule: this stays Moderate until the manual fetch comes back.
Ahrefs estimated organic traffic falls sharply while Search Console clicks and GA4 organic sessions are flat. The estimate loses.
- 01
Ahrefs estimated organic traffic down 30%
Ahrefs · downThe metrics endpoint reports a large fall in estimated monthly organic visitors for our own domain.
- 02
Search Console clicks unchanged
GSC · flatFirst-party search data for the same window shows clicks and impressions inside normal variance.
- 03
GA4 organic sessions unchanged
GA4 · flatThe behavioral layer agrees with the search layer: the same number of people arrived and behaved the same way.
- 04
Ahrefs organic keyword count moved with the estimate
Ahrefs · downTracked keyword counts moved in step, which points at Ahrefs' keyword coverage or volume model rather than at our traffic.
- 05
The estimate is not evidence of a traffic decline
HypothesisA modelled figure derived from third-party keyword data changed; two measurements of the actual traffic did not.
ConclusionNo traffic finding. Report it as a third-party estimate change with no first-party corroboration, note it in case a stakeholder sees the same chart, and take no action. Connector Scout rule: an estimate never overrides a measurement of the same thing — the only legitimate daily use of estimated traffic is for targets whose analytics you cannot see.
Two first-party sources agree against one third-party model, and the vendor documents the disputed figure as an estimate. Deciding the estimate loses is close to a definitional call rather than an inference.
Common diagnostic patterns
Connector Scout editorial guidance — recurring off-site shapes and the check that settles each one
Link count collapses, referring domains do not
Confidence 80% — High confidence- Ahrefs: live backlinks decreased
- Ahrefs: live referring domains unchanged
- GSC: clicks unchanged
- Usually means
- One referring domain changed a site-wide element — a footer, sidebar or template link — so thousands of links moved and the number of distinct sites linking to you did not.
- Rule out first
- A genuine multi-site loss, which would move the referring-domain count too.
- Next check
- Group the lost links by source domain. If one domain accounts for nearly all of them, this is a template change and rarely worth escalating.
New links spike with no campaign behind it
Confidence 62% — Moderate confidence- Ahrefs: new links increased
- GSC: impressions unchanged
- Internal: outreach activity unchanged
- Usually means
- A crawl-discovery artefact. First seen records when Ahrefs discovered the link, so a batch of older links reaching the index at once looks like a sudden gain.
- Rule out first
- Real acquisition — a launch, a mention or a piece that was picked up in the window.
- Next check
- Sample the new records and compare the referring page's own publication date against the first-seen date before attributing anything to a campaign.
Lost links that were never actually removed
Confidence 70% — Moderate confidence- Ahrefs: lost links increased
- GSC: clicks unchanged
- Ahrefs: referring domains unchanged
- Usually means
- Redirect, canonical or URL changes on the referring side, or a source that was unreachable when Ahrefs crawled it — the link record is lost without the link being gone.
- Rule out first
- A real removal, which a manual fetch of the referring page settles in seconds.
- Next check
- Fetch the top lost referring URLs by hand and check for the link, a redirect chain, or a non-200 response before scheduling any reclamation work.
Broken inbound links after a URL change
Confidence 84% — High confidence- Ahrefs: broken backlinks increased
- GSC: clicks to the old URL decreased
- Internal: recent URL or template change mixed
- Usually means
- A migration, slug change or deletion left inbound links pointing at URLs that no longer resolve — one of the few off-site findings with a concrete, recoverable action attached.
- Next check
- Cross-check the broken targets against the redirect map, then propose redirects for the highest-value sources. The recommendation is still a proposal for a human, not a change.
Competitor estimate rises while ours holds
Confidence 55% — Moderate confidence- Ahrefs: competitor estimated organic traffic increased
- GSC: our impressions unchanged
- Ahrefs: competitor keywords in top 3 increased
- Usually means
- A competitor gained visibility in a shared topic area. Because both figures are estimates, this is a prompt to look, not a finding.
- Rule out first
- Ahrefs index-coverage growth, which lifts these counts for everyone in a market at once.
- Next check
- Compare the movement against two or three other competitors in the same market. If they all rose, it is coverage; if one did, it is worth a SERP-level look at the shared queries.
Ahrefs analyst checklist (Connector Scout editorial guidance)
01Exhaust first-party evidence first
Ahrefs is layer four, not layer one.
- Confirm the change in Search Console, and check GA4 for whether behavior moved with it.
- Rule out deploys, content edits, redirects and robots changes in the same window.
- Only open Ahrefs when the first-party layers leave the change unexplained.
02Scope the off-site pull before spending units
- Name the target and the mode — exact, prefix, domain or subdomains — because the scope changes the answer.
- Select only the fields the question needs; cost scales with fields as well as rows.
- Start with backlinks stats for the totals, and only escalate to a link-level pull if the totals moved.
03Localize the movement
- Ask whether the change sits on one page or across the site, using pages by backlinks.
- Group lost and new links by source domain to separate a template change from a real multi-site movement.
- Check whether the anchor distribution shifted, which points at a different kind of change entirely.
04Validate before reporting
- Manually fetch the highest-value lost or broken referring pages; never report a lost record as a removal without it.
- Compare first-seen dates against the referring page's own publication date before crediting a campaign.
- Label every traffic, value or keyword-count figure as an Ahrefs estimate in the brief itself.
05Report as corroboration, not proof
- Cap an Ahrefs-only explanation at Moderate confidence and name the competing explanation.
- Never claim a Domain Rating or URL Rating change affected rankings.
- Record the units consumed and the remaining allowance alongside the finding, so the cost of the investigation is visible.
Semrush#
Ahrefs answers what changed outside the site. Semrush answers two questions Ahrefs cannot: what your own configured Position Tracking campaign recorded for a defined keyword set, and how a market looks in one named regional database — plus, for subscribers, modelled Traffic & Market data that no first-party source can supply.
Semrush is the second third-party layer in this guide, and the temptation to treat it as a first-party one is stronger here than anywhere else, because Position Tracking looks like your rankings and Traffic & Market looks like traffic. Neither is. Position Tracking is a measurement of the keywords, search engine, location and device you configured in a Semrush campaign, and Traffic & Market is modelled market data. Search Console and GA4 remain the arbiters of your own performance.
What Semrush genuinely adds to a daily analyst is scoped, repeatable observation of a keyword set you chose, a documented backlink dataset with explicit first- and last-seen fields, keyword demand context in a specific regional database, and crawl-based Site Audit observations from your own campaign. Every one of those is corroboration or context. None of them proves a Google ranking, actual traffic, user intent, content quality or causation.
Every product, endpoint, version, plan, unit and field claim below comes from Semrush's own developer documentation, linked at the end of the section, and where two current official pages disagree this chapter says so rather than choosing silently. The cadence split, the interpretation rules, the diagnostic patterns, the confidence caps and the sequencing are Connector Scout editorial guidance and are labeled as such.
What Semrush contributes beyond Search Console, GA4 and Ahrefs
Semrush earns its place for three things the other layers cannot supply: a repeatable observation of a keyword set you configured in a Position Tracking campaign, including SERP-feature flags for AI features; a documented link dataset with explicit first-seen and last-seen fields; and, for subscribers, modelled Traffic & Market data about a market rather than a site. Everything else it returns overlaps Ahrefs or duplicates first-party data at lower authority.
What changed from older Semrush guidance
The MCP endpoint is v2 and streamable HTTP only
Version 4 arrived for three APIs only — scope the migration precisely
Backlinks v4 and Keyword v4 are Early Access, not GA
API keys are now version-specific
A documented conflict worth naming in your runbook
MCP versus direct API access
| Route | What Semrush documents | Use it for (editorial) |
|---|---|---|
| Semrush MCP server | Endpoint `https://mcp.semrush.com/v2/mcp`, streamable HTTP transport only. OAuth by default; API-key fallback via `Authorization: Apikey YOUR_API_KEY`. Exposes all Trends API methods (subject to your Trends subscription), all SEO API methods, and all read-only methods from Projects API v3 — you can read project data but cannot create projects or change settings. It consumes the same API units as the APIs, and Semrush lists daily AI-agent scanning of keyword and backlink data among its use cases. | Interactive investigation inside a supported AI client, and the read-only guardrail itself: the documented MCP surface cannot write to your projects. |
| Direct API (v3 and v4) | Standard API covers the SEO and Projects APIs; Trends API is a separate product with its own subscription. Version 4 currently covers Backlinks, Keyword reports, Projects and Listing Management with `v4` keys; Version 3 still covers Trends, Domain, Overview, Subdomain, Subfolder and URL reports, Position Tracking and Site Audit with the `v3` key. SEO API responses are available as CSV or JSON; Projects API responses are JSON. | Every scheduled pull: fixed field sets, explicit `display_limit`, stored against a dated baseline, with the unit cost recorded per run. |
The two documented ways to reach Semrush data. Product facts from Semrush developer documentation; the 'use it for' column is Connector Scout editorial guidance.
Semrush MCP server
- What Semrush documents
- Endpoint `https://mcp.semrush.com/v2/mcp`, streamable HTTP transport only. OAuth by default; API-key fallback via `Authorization: Apikey YOUR_API_KEY`. Exposes all Trends API methods (subject to your Trends subscription), all SEO API methods, and all read-only methods from Projects API v3 — you can read project data but cannot create projects or change settings. It consumes the same API units as the APIs, and Semrush lists daily AI-agent scanning of keyword and backlink data among its use cases.
- Use it for (editorial)
- Interactive investigation inside a supported AI client, and the read-only guardrail itself: the documented MCP surface cannot write to your projects.
Direct API (v3 and v4)
- What Semrush documents
- Standard API covers the SEO and Projects APIs; Trends API is a separate product with its own subscription. Version 4 currently covers Backlinks, Keyword reports, Projects and Listing Management with `v4` keys; Version 3 still covers Trends, Domain, Overview, Subdomain, Subfolder and URL reports, Position Tracking and Site Audit with the `v3` key. SEO API responses are available as CSV or JSON; Projects API responses are JSON.
- Use it for (editorial)
- Every scheduled pull: fixed field sets, explicit `display_limit`, stored against a dated baseline, with the unit cost recorded per run.
Setup is short. The endpoint is https://mcp.semrush.com/v2/mcp and it accepts streamable HTTP only. OAuth is the default and needs no headers — the client registers itself and redirects you to the Semrush login. Where a client cannot do OAuth, Semrush documents an API-key fallback sent as Authorization: Apikey YOUR_API_KEY. Keys are version-specific: v4 keys can be created with their own permissions and TTL, but they only reach Backlinks v4, Keyword Reports v4, Projects v4 and Listing Management. Domain, Overview, Subdomain, Subfolder, URL, Position Tracking and Site Audit pulls still need the single account-wide v3 key, which cannot be scoped or revoked — so separate credentials per version where you can, and keep the v3 key in managed secret storage with tight access and a re-issue plan for the integrations that depend on it.
Datasets worth wiring
| Dataset | Question it answers | Output type |
|---|---|---|
| Position Tracking reports (Projects API v3) | What did our configured campaign record for the keywords we chose, in the search engine, location and device we configured? | Project-tracked measurement, scoped to the campaign. Organic and Adwords overview, positions, competitors discovery, visibility index and landing-pages reports are served from `https://api.semrush.com/reports/v1/projects/{campaignID}/tracking/`. Not a census of all queries. |
| Backlinks API v4 | What does Semrush's link index currently record for this target, and what moved? | Third-party crawl/discovery records. Overview, Historical Summary, Backlinks, Referring Domains, Referring IPs, Pages, Anchors, Score Profile, Competitors and Summary Comparison, each scoped by `scope` (`ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`) with a `fields` parameter. |
| Domain and Overview reports (SEO API v3) | How does this domain look in one named regional database, and who competes with it? | Third-party dataset scoped to a regional database. Domain organic and paid keywords, domain vs. domain, competitors in organic and paid search, and the domain/subdomain/subfolder/URL overview reports, including history variants. |
| Keyword reports (Keyword API v4 / SEO API v3) | What demand and commercial context sits behind a query? | Third-party keyword dataset. `Get Keyword Metrics` exposes fields including `cpc` (average advertiser cost per click in USD cents), `competitive_density` and `intents`. Demand context, never first-party performance. |
| Site Audit (Projects API v3) | What did the Semrush crawler observe on our own site in the configured campaign? | Crawl observation from your campaign configuration. Documented as running crawls, monitoring progress and retrieving errors, warnings and notices — not a statement about Google's index. |
| Trends API (separate subscription) | How does the wider market and its traffic distribution look? | Modelled market data: the Trends overview documents estimates generated from raw clickstream data processed by a proprietary machine-learning algorithm. A separate product with Basic and Premium plans, rate-limited at 10 requests per second per account, with the overall monthly quota tied to the API units on your subscription (the legacy hourly and daily limit fields still appear in responses but are no longer used). Never present it as analytics sessions. |
Semrush data families a daily analyst uses, the question each answers, and how the output must be labeled in a brief.
Position Tracking reports (Projects API v3)
- Question it answers
- What did our configured campaign record for the keywords we chose, in the search engine, location and device we configured?
- Output type
- Project-tracked measurement, scoped to the campaign. Organic and Adwords overview, positions, competitors discovery, visibility index and landing-pages reports are served from `https://api.semrush.com/reports/v1/projects/{campaignID}/tracking/`. Not a census of all queries.
Backlinks API v4
- Question it answers
- What does Semrush's link index currently record for this target, and what moved?
- Output type
- Third-party crawl/discovery records. Overview, Historical Summary, Backlinks, Referring Domains, Referring IPs, Pages, Anchors, Score Profile, Competitors and Summary Comparison, each scoped by `scope` (`ROOT_DOMAIN`, `SUBDOMAIN`, `SUBFOLDER`, `PAGE`) with a `fields` parameter.
Domain and Overview reports (SEO API v3)
- Question it answers
- How does this domain look in one named regional database, and who competes with it?
- Output type
- Third-party dataset scoped to a regional database. Domain organic and paid keywords, domain vs. domain, competitors in organic and paid search, and the domain/subdomain/subfolder/URL overview reports, including history variants.
Keyword reports (Keyword API v4 / SEO API v3)
- Question it answers
- What demand and commercial context sits behind a query?
- Output type
- Third-party keyword dataset. `Get Keyword Metrics` exposes fields including `cpc` (average advertiser cost per click in USD cents), `competitive_density` and `intents`. Demand context, never first-party performance.
Site Audit (Projects API v3)
- Question it answers
- What did the Semrush crawler observe on our own site in the configured campaign?
- Output type
- Crawl observation from your campaign configuration. Documented as running crawls, monitoring progress and retrieving errors, warnings and notices — not a statement about Google's index.
Trends API (separate subscription)
- Question it answers
- How does the wider market and its traffic distribution look?
- Output type
- Modelled market data: the Trends overview documents estimates generated from raw clickstream data processed by a proprietary machine-learning algorithm. A separate product with Basic and Premium plans, rate-limited at 10 requests per second per account, with the overall monthly quota tied to the API units on your subscription (the legacy hourly and daily limit fields still appear in responses but are no longer used). Never present it as analytics sessions.
| Cadence | What to pull | Why |
|---|---|---|
| Daily or alert-triggered | Position Tracking organic overview and visibility index for one campaign; positions for a tagged subset of tracked keywords; Backlinks Overview (a fixed per-request cost) for a short priority target list; the free API-unit balance endpoint before and after the run. | Small, fixed, comparable pulls against a stored baseline. Enough to notice movement in a keyword set you chose and in a link profile you watch — nothing more. |
| Weekly or on demand | Full referring-domain and backlink inventories, anchors and score profiles, domain organic keyword exports, competitor and keyword-gap research, Site Audit issue reviews, Trends market pulls. | These are per-line reports that answer strategic questions which do not change daily, and they are where units disappear. Historical variants cost more again. |
Connector Scout editorial guidance — not a Semrush recommendation: what a daily analyst should pull from Semrush, and what belongs in a weekly or on-demand pass.
Daily or alert-triggered
- What to pull
- Position Tracking organic overview and visibility index for one campaign; positions for a tagged subset of tracked keywords; Backlinks Overview (a fixed per-request cost) for a short priority target list; the free API-unit balance endpoint before and after the run.
- Why
- Small, fixed, comparable pulls against a stored baseline. Enough to notice movement in a keyword set you chose and in a link profile you watch — nothing more.
Weekly or on demand
- What to pull
- Full referring-domain and backlink inventories, anchors and score profiles, domain organic keyword exports, competitor and keyword-gap research, Site Audit issue reviews, Trends market pulls.
- Why
- These are per-line reports that answer strategic questions which do not change daily, and they are where units disappear. Historical variants cost more again.
API units, cost control and failure handling
Per line or per request, depending on the report
Historical data costs more
Control the output before you spend
Check the balance with a free request
Insufficient units fail two different ways
Access and included units differ by page — read both
Reading Semrush datasets
Semrush datasets an analyst reads — definitions from Semrush documentation, failure modes and pairing rules from Connector Scout
Tracked keyword position
Position Tracking · organic positions- Measures
- Documented as the ranking recorded by your Position Tracking campaign for a keyword, in the search engine, location and device that campaign is configured for.
- Why it matters
- It is the closest Semrush gets to a repeatable measurement, because you defined the keyword set and the configuration stays constant between runs.
- Misleading when
- Read as 'our ranking'. It is the ranking of the keywords you chose in the configuration you chose. Connector Scout rule: pair every tracked-position claim with Search Console average position and clicks for the same queries before it enters a brief.
AnswersDid the keyword set we decided to watch move?
Visibility index
tracking · visibility- Measures
- Documented as a Position Tracking report covering the visibility of the campaign's tracked keywords over time, with an organic and an Adwords variant.
- Why it matters
- A single number that summarizes a campaign's tracked keyword set, which makes day-over-day movement easy to threshold.
- Misleading when
- Compared across campaigns, or after the tracked keyword set changed. Adding or removing keywords changes the index without anything happening in search. Store the campaign ID and keyword-set version with every observation.
Tracked landing pages
tracking · landing pages- Measures
- Documented as the landing pages recorded for the campaign's tracked keywords, with organic and Adwords variants and a
urlparameter that takes a root-domain, subdomain, subfolder or URL mask. - Why it matters
- Localises a tracked movement onto specific pages, which is the step that turns a visibility change into something a human can check.
- Misleading when
- The URL mask does not match the scope you think it does. Semrush documents different mask forms per URL type, and some reports require the URL without a mask — a mismatch quietly changes the answer rather than erroring.
SERP feature flags, including AI features
SERP features · aio / aim / aic / aai- Measures
- Documented letter codes for SERP features supported in Position Tracking filtering, including
aio(AI overview),aim(AI summary),aic(AI chat) andaai(Ask AI), alongside the conventional ad, snippet and pack features. - Why it matters
- Lets the analyst ask whether a click decline coincides with an AI or feature change on the SERPs for tracked keywords, rather than assuming a ranking cause.
- Misleading when
- Treated as proof of what a user saw. It is Semrush's observation of the SERP for that configuration at that time; personalisation and rollout differences mean a feature flag corroborates a hypothesis, it does not confirm an experience.
AnswersDid the shape of the results page change, not just our position in it?
Backlink and referring-domain counts
backlinks_count / domains_count- Measures
- Documented in Backlinks API v4 Overview as the number of backlinks and the number of referring domains for the requested target and
scope, alongsidefollows_count,nofollows_count,urls_count,ips_countand related counts. - Why it matters
- Referring domains move slowly, so a genuine change is readable, and the Overview endpoint is a fixed per-request cost rather than a per-line one — cheap enough to run daily on a short list.
- Misleading when
- Read as what Google sees, or compared against a different
scope. Root domain, subdomain, subfolder and page return different numbers for the same site; Semrush's own troubleshooting page names scope mismatch as a leading cause of API-versus-UI discrepancies.
New and lost link counts
new_count / lost_count / first_seen_at- Measures
- Documented in Backlinks v4 as the number of new backlinks — meaning those whose
first_seen_atfalls within the last 30 days — and the number lost, withfirst_seen_atdefined as when the item was first found. - Why it matters
- The most alert-worthy backlink fields, and the only ones with a time dimension attached.
- Misleading when
- Read as link creation or link removal. First seen is Semrush's discovery date, not a publication or link-creation date, so a batch of newly discovered links can be old links reaching the index. Connector Scout rule: validate the highest-value records by fetching the referring page before reporting a cause.
AnswersWhen did Semrush learn about this link — not when was it built?
Authority and domain scores
score / domain_score- Measures
- Documented Backlinks v4 fields: the target's score and, per referring source,
domain_score— 'source domain authority score' — with a Score Profile endpoint reporting the distribution. - Why it matters
- A consistent way to sort which gained or lost links deserve a human's attention first.
- Misleading when
- Presented as a Google ranking factor. These are Semrush's own scores. A change in either causes nothing, and no brief should contain a sentence in which a score moves rankings.
Keyword demand and commercial context
cpc / competitive_density / intents- Measures
- Documented Keyword API v4 fields:
cpcas the average price in USD cents advertisers pay for a click on an ad triggered by the keyword,competitive_densityas the competition level among PPC advertisers, andintentsas the search intents associated with the keyword. - Why it matters
- Turns a query list into a prioritized one by attaching demand and commercial weight to it.
- Misleading when
- Used as evidence of what your visitors wanted.
intentsis Semrush's classification,competitive_densityis about paid competition rather than organic difficulty, and none of it measures your own performance.
Domain organic keywords and positions
SEO API v3 · domain reports- Measures
- Documented per-line reports returning the keywords a domain ranks for in a selected regional database, with paid, competitor and domain-versus-domain variants and historical options.
- Why it matters
- The only way to size a competitor's organic footprint, because you have no first-party access to theirs.
- Misleading when
- Compared across regional databases, or across dates without recording the database, or treated as your own performance. Semrush documents update cycles, aggregation and naming as reasons API figures differ from the UI; a domain report is a third-party dataset for one database, not a ranking fact.
Site Audit issues
Projects API v3 · Site Audit- Measures
- Documented as crawling websites, monitoring crawl progress and retrieving structured reports of errors, warnings and notices for the configured campaign.
- Why it matters
- Gives a technical hypothesis a crawl-level check, from a crawler whose configuration you control.
- Misleading when
- Read as Google's view. It is what the Semrush crawler saw under your campaign settings; confirm anything indexation-shaped in Search Console before it becomes a finding.
Data quality and interpretation limits
Three different kinds of data wear the same logo
Scope mismatches produce wrong answers, not errors
Short results can be truncation
Position Tracking is a configuration, not a census
Discovery timing is not publication timing
Version churn is an operational risk
MCP answers are model output
Worked evidence chains
Search Console shows clicks down with impressions and position stable, GA4 shows no behavioral change, and the Semrush campaign records an AI overview appearing on the affected tracked keywords.
- 01
Search Console clicks down, impressions and position flat
GSC · downThe queries still surface as often and in the same place, but fewer people click — so this is a results-page change rather than a visibility change.
- 02
GA4 engagement for the landing page unchanged
GA4 · flatThe visitors who did arrive behaved as before, which makes a broken template or an on-page content regression less likely — it does not rule one out, since a regression that deters clicks in the SERP or affects only non-arriving users would leave engagement flat.
- 03
Semrush tracked positions for those keywords unchanged
Semrush · flatThe campaign, configured for the same location and device as the affected queries, records no ranking movement — a second, independently configured observation agreeing with Search Console.
- 04
AI overview flag now present on the tracked keywords
Semrush · changedThe campaign's SERP-feature data shows the
aiofeature on keywords that did not carry it in the stored baseline. - 05
Hypothesis: a SERP-layout change is the leading candidate for the CTR fall
HypothesisFlat impressions and position weaken the visibility explanations, and unchanged engagement weakens the on-page ones, leaving a results-page change as the best-supported candidate. Flat clicks, impressions and position do not prove a layout change — they are consistent with one, which is why this stays a hypothesis until query-level CTR is checked.
- 06
Compare CTR by query and device in Search Console across the same window
CheckIf the CTR fall concentrates on the queries carrying the new feature, the hypothesis survives; if it is spread evenly, look for a snippet or title change instead.
ConclusionReport it as: clicks fell without a visibility change, and Semrush's campaign records an AI overview newly present on the affected tracked keywords. Recommended next check: segment Search Console CTR by query and device. Do not write that the AI overview caused the decline — Semrush observed a SERP feature for one configuration, which is corroboration, not causation.
Two independent sources agree that position did not move and a third records a plausible SERP change, but the feature observation is one vendor's view of one configuration and no user-level evidence exists. Connector Scout rule: SERP-feature explanations cap at Moderate until query-level CTR confirms the concentration.
Semrush reports fewer referring domains than the stored baseline, Ahrefs does not, and the difference resolves to a scope and truncation problem rather than a link loss.
- 01
Semrush referring domains down against the stored baseline
Semrush · downThe Backlinks v4 Overview response returns a lower
domains_countthan the value stored for the previous run. - 02
Ahrefs live referring domains flat over the same window
Ahrefs · flatA second third-party crawl index shows no change, so at least one of the two records is describing something other than a real loss.
- 03
Search Console clicks and impressions unchanged
GSC · flatNo first-party corroboration of any consequence, which lowers the priority of the finding regardless of its cause.
- 04
The two runs used different `scope` values
Pipeline · scopeThe stored baseline was collected at
ROOT_DOMAINand the new run atSUBDOMAIN. Semrush documents scope mismatch as a leading cause of discrepancies. - 05
This is a pipeline defect, not an off-site event
HypothesisTwo records describing different scopes were compared as if they described the same target.
- 06
Re-run at the baseline scope and check the unit balance and row counts
CheckRe-request with the original
scope, and confirm that requested and returned row counts match on any per-line follow-up, since an insufficient balance returns only the rows it can pay for.
ConclusionReport it as a data-quality defect, not a backlink finding: the comparison was not like-for-like. Fix the stored scope, re-run, and add scope to the record key so the same comparison cannot be made again. Connector Scout rule: a third-party movement contradicted by another third-party index and unsupported by first-party data is a measurement question before it is an SEO question.
The explanation is a documented behavior of the API and is directly verifiable by re-running the request with the original parameters. Very high confidence is appropriate because the check is deterministic rather than inferential.
Common diagnostic patterns
Connector Scout editorial guidance — recurring Semrush shapes, the explanation each usually supports, and the check that settles it
Tracked positions move but Search Console does not
Confidence 70% — Moderate confidence- Semrush: tracked positions decreased
- GSC: average position unchanged
- GSC: clicks unchanged
- Usually means
- A scope difference between the campaign and reality: the campaign's location, device or search engine does not represent where your actual impressions come from, or the tracked keyword set is not the set that drives clicks.
- Rule out first
- A genuine localised ranking change, which would show in Search Console once segmented by country and device.
- Next check
- Segment Search Console by country and device to match the campaign configuration, then compare only the tracked queries.
Visibility index jumps with no ranking movement behind it
Confidence 78% — High confidence- Semrush: visibility index mixed
- Semrush: tracked keyword count mixed
- GSC: impressions unchanged
- Usually means
- The tracked keyword set changed. Adding or removing keywords rebases the index, so the series is discontinuous rather than the rankings having moved.
- Rule out first
- A real broad movement, which would appear in Search Console impressions too.
- Next check
- Diff the campaign's keyword list against the stored version for the previous run before reading the index at all.
A dataset shrinks overnight with no other signal
Confidence 85% — High confidence- Semrush: returned rows decreased
- Semrush: API unit balance decreased
- GSC: clicks unchanged
- Usually means
- Truncation. Per-line SEO and Trends reports return only as many rows as the remaining balance covers, and top-N endpoints return partial data without pagination.
- Rule out first
- A real disappearance of keywords or links, which would show at a stable row count.
- Next check
- Compare requested against returned rows, read the free balance endpoint, and check the API Queries log for the run's report cost before treating the shortfall as data.
Backlink count collapses while referring domains hold
Confidence 76% — High confidence- Semrush: backlinks_count decreased
- Semrush: domains_count unchanged
- GSC: clicks unchanged
- Usually means
- One referring domain changed a template, footer or sidebar link, so many links moved and the number of distinct linking sites did not.
- Rule out first
- A multi-site loss, which would move the referring-domain count as well.
- Next check
- Group the change by referring domain using the Referring Domains endpoint. If one domain accounts for nearly all of it, this rarely deserves escalation.
New links spike with no campaign behind it
Confidence 60% — Moderate confidence- Semrush: new_count increased
- Internal: outreach activity unchanged
- GSC: impressions unchanged
- Usually means
- Crawl-discovery timing.
new_countcounts items first seen in the last 30 days, so a batch of older links reaching the index at once looks like acquisition. - Rule out first
- Genuine acquisition — a launch or a mention that landed in the window.
- Next check
- Sample the new records and compare each referring page's own publication date against
first_seen_atbefore crediting anything.
Competitive numbers disagree with last month's report
Confidence 82% — High confidence- Semrush: domain organic keywords mixed
- Semrush: regional database mixed
- GSC: impressions by country unchanged
- Usually means
- The two pulls used different regional databases, scopes, filters or date settings — the discrepancy causes Semrush documents between API results and the UI.
- Rule out first
- A real competitive shift, which survives once both pulls are aligned.
- Next check
- Re-run both with the database, scope, filters and dates pinned to the baseline record, and only then compare.
Semrush analyst checklist (Connector Scout editorial guidance)
01Place Semrush after the first-party layers
Search Console and GA4 decide what happened to you; Semrush describes context around it.
- Confirm the change in Search Console and check GA4 before opening any third-party tool.
- Ask what specifically Semrush can add: a tracked keyword set, a SERP-feature observation, a link record, a market view — if the answer is none of those, do not spend the units.
- Decide up front whether the output will be corroboration or context; it is never proof.
02Pin the scope before spending units
- Record the regional database, target scope, device, search engine, location, date and filter set with the request, not just the response.
- Use
display_limit, filters and — where supported —fieldsto return only what the question needs. - Read the free balance endpoint before the run and again after it, and store the delta with the results.
03Validate the response before interpreting it
- Compare requested rows against returned rows and treat any shortfall as possible truncation, not as an absence of data.
- Check for
ERROR 132on SEO, Trends, Position Tracking and Site Audit calls, and403on Projects and Local calls. - Confirm the API version and key version used, and that the campaign's tracked keyword set is unchanged since the baseline.
04Label the data family in the record
- Mark each value as a modelled estimate, a crawl or discovery record, or a project-tracked measurement.
- Never store a Semrush figure under a field name that implies first-party traffic, rankings or sessions.
- Keep Trends data in its own namespace so market modeling can never be summarized as analytics.
05Report as corroboration with a named check
- Cap a Semrush-only explanation at Moderate confidence and name the competing explanation.
- Never write that an authority score, a SERP feature or a tracked position caused a change.
- State the units consumed and the remaining balance alongside the finding, so the cost of the investigation is visible to the reviewer.
Microsoft Clarity#
Search Console, GA4, Ahrefs and Semrush tell the analyst that something changed. Microsoft Clarity is the behavioral-observation layer for the pages that evidence has already flagged: what interactions Clarity collected, how they aggregate, and — for a handful of retained sessions — what the interaction looked like.
Clarity is the last layer to open and the easiest to over-read. It can show collected interactions, aggregate behavior patterns, heatmaps and retained recordings. It cannot prove search ranking, user intent, content quality, user motivation or causation, and nothing it returns can override Search Console or GA4 for your own performance.
That sequencing is deliberate. Clarity should usually follow Search Console and GA4 in an investigation rather than originate an SEO claim: it observes behavior after arrival, so it explains what happened to visitors who already got there, and its most valuable output is often a negative one — behavior did not change, so look elsewhere.
Every product capability, endpoint, limit, retention period and field name below comes from Microsoft's own Clarity documentation and the official Microsoft MCP repository, linked at the end of the section, and where two current official pages disagree this chapter says so rather than choosing silently. The diagnostic patterns, confidence scores, recommended cadence, dimension choices, evidence chains, token-security advice and the MCP-versus-API split are Connector Scout editorial guidance and are labeled as such. Nothing here is legal advice: consent and privacy implementation must be validated with your own privacy and legal owners.
What Clarity contributes — and what it cannot tell you
Clarity is the behavioral-observation layer for pages that first-party search and analytics evidence has already flagged. Microsoft documents it as collecting interactions, aggregating them into dashboard metrics, rendering heatmaps of clicks and scroll reach, and retaining a limited set of session recordings reconstructed from DOM and interaction data. Those four things are what it contributes.
What it cannot do matters just as much. Clarity has no view of queries, impressions or ranking, no measure of intent or content quality, and no mechanism for establishing causation. A behavioral signal is an indicator that something is worth reproducing — never a finding on its own.
What changed from older Clarity guidance
The official MCP server runs locally, not as a hosted endpoint
The official repository is internally inconsistent about per-tool token passing
Consent signals are enforced for EEA, UK and Switzerland traffic
Tracking all sessions is not the same as retaining all recordings
Two current official pages disagree on heatmap retention
MCP versus direct API access
| Route | What it is | Connector Scout recommendation |
|---|---|---|
| Official MCP server | A locally run npm package, `@microsoft/clarity-mcp-server`, started with `npx @microsoft/clarity-mcp-server --clarity_api_token=...` or from a global install. Requires Node.js 16+ and a project Data Export API token, which the Learn page says can also be passed as a tool parameter. The current repository documents `query-analytics-dashboard`, `list-session-recordings` and `query-documentation-resources`, giving access to project analytics, session-recording lists and documentation. It is not hosted by Microsoft and uses no OAuth. The Learn page repeats the export-token limits for its analytics examples: 10 requests per project per day, at most 3 days and up to 3 dimensions per request. Microsoft's documentation does not establish that documentation-resource or recording-list calls draw on that same export quota. | Interactive investigation only — the follow-up questions a human asks about a page the brief already flagged. |
| Data Export API | `GET https://www.clarity.ms/export-data/api/v1/project-live-insights` with `Authorization: Bearer <token>`; only project admins can manage tokens. `numOfDays` accepts 1, 2 or 3, corresponding to the previous 24, 48 or 72 hours, and up to three dimensions may be supplied from Browser, Device, Country/Region, OS, Source, Medium, Campaign, Channel and URL. Responses are UTC, capped at 1,000 rows with no pagination. | Every scheduled pull. A deterministic pipeline should not depend on a model's choice of tool or parameters. |
Two documented routes into Clarity data. Capabilities and limits from Microsoft documentation; the recommended use of each is Connector Scout guidance.
Official MCP server
- What it is
- A locally run npm package, `@microsoft/clarity-mcp-server`, started with `npx @microsoft/clarity-mcp-server --clarity_api_token=...` or from a global install. Requires Node.js 16+ and a project Data Export API token, which the Learn page says can also be passed as a tool parameter. The current repository documents `query-analytics-dashboard`, `list-session-recordings` and `query-documentation-resources`, giving access to project analytics, session-recording lists and documentation. It is not hosted by Microsoft and uses no OAuth. The Learn page repeats the export-token limits for its analytics examples: 10 requests per project per day, at most 3 days and up to 3 dimensions per request. Microsoft's documentation does not establish that documentation-resource or recording-list calls draw on that same export quota.
- Connector Scout recommendation
- Interactive investigation only — the follow-up questions a human asks about a page the brief already flagged.
Data Export API
- What it is
- `GET https://www.clarity.ms/export-data/api/v1/project-live-insights` with `Authorization: Bearer <token>`; only project admins can manage tokens. `numOfDays` accepts 1, 2 or 3, corresponding to the previous 24, 48 or 72 hours, and up to three dimensions may be supplied from Browser, Device, Country/Region, OS, Source, Medium, Campaign, Channel and URL. Responses are UTC, capped at 1,000 rows with no pagination.
- Connector Scout recommendation
- Every scheduled pull. A deterministic pipeline should not depend on a model's choice of tool or parameters.
Setup for the MCP server is local. Microsoft publishes it as the npm package @microsoft/clarity-mcp-server, run with npx @microsoft/clarity-mcp-server --clarity_api_token=your-token-here or from a global install, with Node.js 16 or later and a Clarity project Data Export API token as the prerequisites. The token can also be supplied as a tool parameter. There is no Microsoft-hosted Clarity MCP endpoint and no OAuth flow. The direct route is a single documented request: GET https://www.clarity.ms/export-data/api/v1/project-live-insights, authenticated with Authorization: Bearer <token>, where only project admins can manage tokens.
Data surfaces and cadence
| Surface | What it returns | Documented limits |
|---|---|---|
| Data Export API aggregates | Documented metric groups include Scroll Depth, Engagement Time, Traffic, Popular Pages, Browser, Device, OS, Country/Region, Page Title, Referrer URL, Dead Click Count, Excessive Scroll, Rage Click Count, Quickback Click, Script Error Count and Error Click Count. | Last 1–3 days only, maximum 3 dimensions, maximum 1,000 rows with no pagination, 10 requests per project per day, UTC output. |
| Session recordings | Recordings reconstructed from DOM and page information plus interaction events — not video streams. The MCP server can list session recordings; the export endpoint does not return replay payloads. | Up to 100,000 recordings per project per day, above which retained recordings are sampled; playback data is retained for 30 days, labeled or favourited sessions for 9 months. |
| Heatmaps | Aggregated clicks and scroll reach across pageviews for a page, segmentable by device, viewed in the Clarity UI. | Capped at 100,000 pageviews per heatmap, with documented rendering limits for dynamic, canvas, iframe and nested-scroll contexts. Heatmap images are not returned by `project-live-insights`. |
Clarity surfaces and what each one can answer. Capabilities and retention from Microsoft documentation.
Data Export API aggregates
- What it returns
- Documented metric groups include Scroll Depth, Engagement Time, Traffic, Popular Pages, Browser, Device, OS, Country/Region, Page Title, Referrer URL, Dead Click Count, Excessive Scroll, Rage Click Count, Quickback Click, Script Error Count and Error Click Count.
- Documented limits
- Last 1–3 days only, maximum 3 dimensions, maximum 1,000 rows with no pagination, 10 requests per project per day, UTC output.
Session recordings
- What it returns
- Recordings reconstructed from DOM and page information plus interaction events — not video streams. The MCP server can list session recordings; the export endpoint does not return replay payloads.
- Documented limits
- Up to 100,000 recordings per project per day, above which retained recordings are sampled; playback data is retained for 30 days, labeled or favourited sessions for 9 months.
Heatmaps
- What it returns
- Aggregated clicks and scroll reach across pageviews for a page, segmentable by device, viewed in the Clarity UI.
- Documented limits
- Capped at 100,000 pageviews per heatmap, with documented rendering limits for dynamic, canvas, iframe and nested-scroll contexts. Heatmap images are not returned by `project-live-insights`.
| Cadence | What to pull | Why |
|---|---|---|
| Daily, scheduled (1 call) | One canonical `numOfDays=1` pull on URL + Device + Channel — or another three-dimension combination you can justify in writing — persisted immediately on receipt. | The window is rolling and only reaches back 72 hours, so an unstored day is unrecoverable. One fixed shape also keeps day-over-day records comparable. |
| On demand (reserve the rest) | Targeted validation pulls for pages the brief already flagged, with the dimension set chosen for that question, plus interactive MCP analytics queries — which are backed by Data Export and must be budgeted against the same 10-call export limit. | Ten Data Export requests per project per day is the whole export budget, and spending it on speculative slices leaves nothing for the investigation that matters. Microsoft's documentation does not state that documentation-resource or recording-list MCP calls consume that export quota, so treat only export-backed analytics queries as spending it. |
| Manual, in the UI | Heatmaps and individual recordings for a specific page and device, after the aggregates have named a candidate. | Neither is available through the export endpoint, and both are qualitative evidence for a human, not pipeline input. |
Connector Scout editorial guidance — how to spend the project's 10 daily Data Export calls. The exact dimensions are our recommendation, not a Microsoft rule.
Daily, scheduled (1 call)
- What to pull
- One canonical `numOfDays=1` pull on URL + Device + Channel — or another three-dimension combination you can justify in writing — persisted immediately on receipt.
- Why
- The window is rolling and only reaches back 72 hours, so an unstored day is unrecoverable. One fixed shape also keeps day-over-day records comparable.
On demand (reserve the rest)
- What to pull
- Targeted validation pulls for pages the brief already flagged, with the dimension set chosen for that question, plus interactive MCP analytics queries — which are backed by Data Export and must be budgeted against the same 10-call export limit.
- Why
- Ten Data Export requests per project per day is the whole export budget, and spending it on speculative slices leaves nothing for the investigation that matters. Microsoft's documentation does not state that documentation-resource or recording-list MCP calls consume that export quota, so treat only export-backed analytics queries as spending it.
Manual, in the UI
- What to pull
- Heatmaps and individual recordings for a specific page and device, after the aggregates have named a candidate.
- Why
- Neither is available through the export endpoint, and both are qualitative evidence for a human, not pipeline input.
Limits, timezones, row caps and failure handling
Token handling
A 72-hour rolling window, not a date-range API
UTC output against a local-time dashboard
1,000 rows, no pagination
Documented failure handling
Preserve raw vendor field names
Privacy, masking and consent
Microsoft’s client API documentation classifies input-box content, numbers and email addresses as sensitive and masked by default, and masked content is not uploaded. Masking can be expanded, and unmasking is an explicit choice. That is a strong default, but it is not a claim that privacy is automatic or complete — what is collected still depends on how your implementation configures masking.
Consent is enforced. Since 31 October 2025 Microsoft enforces consent signals for page visits from the EEA, the UK and Switzerland before full Clarity functionality is available. consentv2 is the current recommended method and the older consent API is planned for deprecation. Without granted consent, Clarity runs in no-consent mode with no first- or third-party cookies: the documentation says it assigns a unique ID per pageview and cannot persist the cross-page journey, which fragments sessions and affects funnels and recordings.
Reading Clarity metrics and signals
Clarity metrics and behavioral signals — definitions from Microsoft documentation, failure modes and pairing rules from Connector Scout
Traffic and sessions
Traffic- Measures
- Sessions Clarity collected for the project in the requested rolling window, sliceable by up to three dimensions.
- Why it matters
- Establishes whether a behavioral change sits on top of a stable audience or a changing one.
- Misleading when
- Clarity sessions and GA4 sessions are defined and collected differently and will not reconcile. Consent state, tracking-code coverage and blockers all move this number independently of real demand.
AnswersDid the audience for this page change, or only its behavior?
Bot sessions
Traffic- Measures
- Sessions Clarity attributes to bots within the collected traffic.
- Why it matters
- A shift in the bot share can move every behavioral rate on a page without a single human behaving differently.
- Misleading when
- Treated as a clean split. Check the bot share before reading any rate change as a human-behavior change.
Distinct Users
distantUserCount- Measures
- The dashboard's distinct-user concept; the documented JSON sample returns it under the key
distantUserCount. - Why it matters
- Separates a change in how many people arrived from a change in how many times they came back.
- Misleading when
- Read as a stable identity count. Under no-consent mode Clarity assigns a unique ID per pageview and cannot persist the cross-page journey, which inflates apparent distinct users in affected regions.
Pages per session
Traffic- Measures
- How many pages a collected session touched.
- Why it matters
- A drop can indicate a navigation or internal-linking problem on an entry template.
- Misleading when
- Compared across a consent-implementation change: per-pageview IDs fragment journeys and drive this number toward one without any user behaving differently.
Scroll depth
Scroll Depth- Measures
- How far down the page collected sessions scrolled.
- Why it matters
- Shows whether content below the fold is reached at all.
- Misleading when
- Applied to short pages. Low scroll depth is appropriate for a page that answers in the first screen, and high scroll depth can mean searching rather than reading.
Total and active engagement time
Engagement Time- Measures
- Time associated with collected sessions, reported by Clarity as separate total and active figures.
- Why it matters
- Distinguishes an open tab from actual interaction with the page.
- Misleading when
- Used as a proxy for content quality, or compared with GA4 engagement metrics, which are defined differently and are not interchangeable.
Rage clicks
Filter- Measures
- Repeated clicks in a clustered area within a brief period, per the Clarity filters documentation.
- Why it matters
- A strong candidate signal for an element that looks interactive and is not.
- Misleading when
- Read as frustration by definition. Rapid legitimate interaction — a stepper, a gallery, a quantity control — produces the same shape.
AnswersIs there an element on this page that is not responding as users expect?
Dead clicks
Filter- Measures
- A click that produced no response, per the filters documentation.
- Why it matters
- Points at non-interactive elements that read as interactive, or at broken handlers.
- Misleading when
- Counted on decorative imagery and text, where a click with no response is the correct behavior.
Excessive scrolling
Filter- Measures
- Scrolling faster than expected for normal content consumption.
- Why it matters
- Suggests the visitor is hunting for something the page did not put where they looked.
- Misleading when
- Applied to long reference pages, where fast scrolling to a known section is ordinary use.
Quick backs
Filter- Measures
- Navigating to a new page and quickly returning.
- Why it matters
- Can indicate a link or template that did not deliver what it promised.
- Misleading when
- Read as dissatisfaction. A quick back is also what a successful lookup looks like when the answer was visible immediately.
Script errors and error clicks
Error Count- Measures
- Two distinct documented counts: an error click is a click occurring immediately before a JavaScript error, while a script error is recorded independently of any click.
- Why it matters
- Error clicks localise a defect to an interaction; script errors show breakage that may never surface as a click.
- Misleading when
- Merged into one 'errors' figure. They answer different questions, and collapsing them destroys the localisation that makes an error click useful.
AnswersIs the failure attached to a specific control, or ambient on the page?
Data quality and interpretation limits
72-hour rolling window
1,000-row cap with no pagination
10 Data Export calls per project per day
UTC API against a local-time dashboard
Consent fragmentation
Recording availability is sampled above volume
Tracking-code coverage
Insights are ML-based filters and recommendations
URL scope and normalization
Retention differs by data type, and one figure is disputed
Not for audiences under 18
Worked evidence chains
GA4 shows key events and engagement falling on one mobile landing page, Clarity's URL + Device slice shows dead clicks, error clicks and script errors rising on the same page and device, and targeted recordings show the same CTA failing.
- 01
GA4 key events and engagement down on one mobile landing page
GA4The decline is isolated to one page and one device class, with desktop for the same page unchanged.
- 02
Clarity URL + Device shows dead clicks, error clicks and script errors rising
Clarity APIA single scheduled
numOfDays=1pull on URL + Device + Channel shows all three counts up on the affected page and device, with traffic to it flat. - 03
Error clicks are distinct from ambient script errors here
ClarityError clicks rose alongside script errors, which localises at least part of the breakage to an interaction rather than to page load alone.
- 04
Targeted recordings show the same CTA not responding
Clarity recordingsSeveral retained recordings for that page and device show repeated taps on the primary CTA with no navigation. Recordings are sampled above volume, so this illustrates the failure; it does not measure its prevalence.
- 05
Reproduce on the device class and inspect client logs
Reproduce the interaction on the affected device class and read the browser console and release history for the template before changing anything.
ConclusionThe evidence supports a mobile front-end defect hypothesis on that template, not a proven cause. Reproduce it and inspect the logs before shipping a change; Clarity has shown where to look, not what broke.
Three independent surfaces agree on the same page and device, but recordings are sampled and no log-level confirmation exists yet — so this stays a strong hypothesis with a named validation step.
Search Console clicks and impressions fall on a cluster of pages while GA4 post-click quality and every Clarity behavioral signal remain flat.
- 01
Search Console clicks and impressions down across a page cluster
Search ConsoleFewer people see and click the pages in search; the loss is on the visibility side of the click.
- 02
GA4 post-click quality unchanged
GA4Engagement and key-event rates per session for visitors who did arrive are flat against the prior baseline.
- 03
Clarity behavioral signals flat on the same pages
Clarity APIRage clicks, dead clicks, quick backs, scroll depth and error counts are unchanged for the same URLs and device split.
- 04
Clarity supplies no corroborating behavioral change
Clarity observes behavior after arrival. A flat aggregate behavioral picture alongside fewer arrivals means Clarity offers no supporting evidence for a behavioral explanation — it weakens a widespread one without excluding unmeasured subsegments, tracking gaps, sampled recordings or template variants.
- 05
Investigate queries, SERP appearance and technical search evidence
Return to query-level Search Console data, SERP appearance and indexing or technical checks for the affected cluster.
ConclusionThis is a search-visibility investigation, not a behavioral one. The Clarity finding is a negative one: it supplies no corroborating behavioral change, which is a reason to return to search evidence — not proof that every on-page factor is excluded.
Three sources agree that aggregate post-click behavior did not visibly change, which is enough to deprioritise a broad behavioral explanation. It is not enough to exclude one: subsegments below the aggregate, tracking or consent gaps, sampled recordings and template variants remain unmeasured, and the actual cause is unidentified until the search-side checks run.
Common diagnostic patterns
Connector Scout editorial guidance — recurring Clarity shapes, the explanation each usually supports, and the check that settles it
Mobile CTA defect hypothesis
Confidence 70% — Moderate confidence- GA4: Key events (mobile) decreased
- Clarity: Dead and error clicks increased
- Clarity: Script errors increased
- Usually means
- An interactive element on one template is failing for a device class, so intent arrives but cannot complete.
- Rule out first
- A release to a different template, a traffic-mix shift toward that device, and a third-party script change unrelated to the CTA.
- Next check
- Reproduce on the device class, read the console and the release history, then confirm with targeted recordings for that page and device.
Content or navigation mismatch
Confidence 55% — Moderate confidence- Clarity: Excessive scrolling increased
- Clarity: Quick backs increased
- Clarity: Scroll depth mixed
- Usually means
- Visitors are hunting for something the page promised but did not place where they looked, or the entry point sets the wrong expectation.
- Rule out first
- A page short enough that fast scrolling and quick returns are appropriate, and a reference page where jumping to a known section is normal use.
- Next check
- Compare the query set for the page in Search Console against what the page leads with, then check a heatmap for the same page and device.
Traffic-mix confounder
Confidence 60% — Moderate confidence- Clarity: Behavioral rates mixed
- Clarity: Device or channel share increased
- Clarity: Bot sessions increased
- Usually means
- The composition of collected traffic changed, moving every aggregate rate without any individual behavior changing.
- Rule out first
- A genuine behavioral change confined to one segment — check whether the within-segment rates held.
- Next check
- Re-slice by device and channel and compare within-segment rates, and check the bot share before reading any rate at all.
Consent or session fragmentation
Confidence 65% — Moderate confidence- Clarity: Sessions (EEA/UK/CH) increased
- Clarity: Pages per session decreased
- GA4: Sessions unchanged
- Usually means
- A consent implementation change pushed regional traffic into no-consent mode, where a unique ID per pageview fragments journeys and inflates session-shaped counts.
- Rule out first
- A real navigation regression. Stable GA4 sessions weaken a broad navigation-regression hypothesis, but they do not rule out a regional or template-specific issue that the aggregate hides.
- Next check
- Confirm the
consentv2rollout date and configuration with the engineering owner, then reproduce segmented by region and template rather than reading the aggregate.
API truncation or quota exhaustion
Confidence 85% — High confidence- Clarity: Returned rows at 1,000 unchanged
- Clarity: Long-tail URLs present decreased
- Clarity: 429 responses increased
- Usually means
- The response hit the non-paginated row cap, or the day's 10 Data Export requests ran out, so the dataset is incomplete rather than the behavior changed.
- Rule out first
- A genuine drop in long-tail pages, which would persist in a narrower, in-quota pull.
- Next check
- Re-run with a narrower dimension set inside the quota, and mark the affected day as incomplete in the brief rather than as a decline.
Recording availability drops while traffic holds
Confidence 70% — Moderate confidence- Clarity: Retained recordings decreased
- Clarity: Sessions unchanged
- GA4: Sessions unchanged
- Usually means
- Recording retention is being sampled above the documented daily ceiling, or consent state changed which sessions can be recorded — not a change in visitor behavior.
- Rule out first
- A tracking-code regression, which would reduce collected sessions as well.
- Next check
- Compare collected sessions against available recordings, check whether daily volume is near the documented ceiling, and use the upgrade API to prioritize the sessions the investigation needs.
Microsoft Clarity analyst checklist (Connector Scout editorial guidance)
01Open Clarity only after the search and analytics layers
Clarity observes behavior after arrival. It should follow Search Console and GA4 in an investigation, not originate an SEO claim.
- Name the page or template the first-party evidence already flagged before spending a request.
- State the behavioral question in one sentence — which interaction, on which device, over which window.
- Accept a negative result: if aggregate behavior is flat, Clarity supplies no corroborating behavioral change, and saying so — without claiming every on-page factor is excluded — belongs in the brief.
02Fix the window and the timezone basis
- Use
numOfDaysof 1, 2 or 3 and record which was used; there is no historical range. - Normalize the UTC API window before comparing anything with a local-time dashboard view.
- Persist every scheduled pull immediately — an unstored day cannot be recovered after 72 hours.
- Use
03Validate the response before interpreting it
- Compare returned rows against the cap and treat exactly 1,000 rows as probable truncation.
- Check remaining quota and report a
429as incomplete evidence, never as a flat day. - Store raw vendor keys such as
distantUserCountas returned and map them explicitly in normalization.
04Treat every signal as an indicator, not a diagnosis
- Keep script errors and error clicks as separate counts with separate meanings.
- Check the bot share and the device and channel mix before reading any rate change.
- Describe rage clicks, dead clicks, excessive scrolling and quick backs as candidate signals with a named alternative explanation.
05Report behavior as observation with a validation step
- Cap a Clarity-only explanation at Moderate confidence and name the competing explanation.
- Label recordings as illustrative examples drawn from a sampled, 30-day set — never as a census.
- Never write that Clarity shows intent, content quality, ranking or causation; write what was observed and what to check next.
Halfway
PDF download
Get the PDF version of this guide
Get the full Daily AI SEO Analyst guide as a PDF: the architecture, the connector classifications and the official sources, for SEO leads building a read-only AI workflow.
Core Web Vitals#
Core Web Vitals is the performance-evidence layer. Field data from the Chrome UX Report says how eligible real Chrome users experienced a page or an origin; lab data from PageSpeed Insights and Lighthouse helps reproduce and diagnose a problem under controlled synthetic conditions. The two answer different questions and must never be merged.
The current Core Web Vitals are Largest Contentful Paint for loading, Interaction to Next Paint for responsiveness and Cumulative Layout Shift for visual stability. web.dev documents the good thresholds as 2.5 seconds or less for LCP, 200 milliseconds or less for INP and 0.1 or less for CLS, evaluated at the 75th percentile of page loads and segmented across mobile and desktop devices.
What this layer cannot do is as important as what it can. Core Web Vitals are real-user performance measurements: they do not measure search intent, content quality, business impact, or the cause of a regression, and they cannot establish that a performance change caused a ranking change. Google states that Core Web Vitals are used by its ranking systems and recommends good scores, while also saying that good tool results do not guarantee top rankings, that relevance remains primary, and that there is no single page-experience signal.
Field and lab evidence stay in separate namespaces throughout this chapter. Field data is aggregated over a rolling collection period across many real users; a lab run is one synthetic load in one configured environment. Lighthouse cannot measure INP at all without real user input, and Total Blocking Time is a lab diagnostic for responsiveness rather than a substitute for INP.
Every capability, endpoint, field name, threshold, aggregation rule, update cadence and limitation below comes from Google's and Chrome's own documentation, linked at the end of the section. The cadence, the multiple-run median rule, the prioritization advice, the diagnostic patterns, the evidence chains and the confidence caps are Connector Scout editorial guidance and are labeled as such.
What Core Web Vitals contribute — and what they cannot tell you
Core Web Vitals are the performance-evidence layer. web.dev documents three metrics: Largest Contentful Paint for loading, Interaction to Next Paint for responsiveness and Cumulative Layout Shift for visual stability, with good defined as 2.5 seconds or less, 200 milliseconds or less and 0.1 or less respectively, assessed at the 75th percentile of page loads and segmented across mobile and desktop.
They measure real-user performance and nothing else. They do not measure intent, content quality or business impact, they cannot identify a cause on their own, and they cannot establish that a performance change moved rankings. Google states that Core Web Vitals are used by its ranking systems and recommends good scores, while also saying that good tool results do not guarantee top rankings, that relevance remains primary, and that there is no single page-experience signal.
What changed from older performance guidance
INP replaced FID as the responsiveness Core Web Vital
The current thresholds are 2.5s, 200ms and 0.1
CLS is a session-window score, not a page total
PageSpeed Insights runs Lighthouse 13.0 as of 20 October 2025
CrUX History API gives 40 weeks of weekly field data
The daily CrUX API is a 28-day rolling average
PSI field data is documented as planned for discontinuation
EXPERIMENTAL_INTERACTION_TO_NEXT_PAINT was removed from the PSI response
Field versus lab: two different questions
| Aspect | Field (CrUX) | Lab (Lighthouse / PSI) |
|---|---|---|
| What it is | Aggregated measurements from eligible real Chrome users over a rolling collection period. | One synthetic load in a configured environment with emulated device and throttling. |
| Answers | How did this page or origin actually perform for eligible users? | What is slow in this run, and what changed after my fix? |
| INP availability | Reported, because real interactions exist. | Not measurable without real user input; TBT is the lab proxy. |
| Freshness | Daily CrUX API is a 28-day rolling average updated daily around 04:00 UTC; History API updates Mondays to the previous Saturday. | Immediate — reflects the moment of the run and the Lighthouse version used. |
| Coverage | Only publicly discoverable, sufficiently popular URLs and origins with eligible users and enough samples. | Any URL the runner can load, including staging and unpopular pages. |
| Reporting rule | Use for assessment: whether the experience is good, needs improvement or poor. | Use for diagnosis and verification: what to change, and whether the change worked. |
Field and lab answer different questions. Definitions from Google and Chrome documentation; the reporting rule is Connector Scout guidance.
What it is
- Field (CrUX)
- Aggregated measurements from eligible real Chrome users over a rolling collection period.
- Lab (Lighthouse / PSI)
- One synthetic load in a configured environment with emulated device and throttling.
Answers
- Field (CrUX)
- How did this page or origin actually perform for eligible users?
- Lab (Lighthouse / PSI)
- What is slow in this run, and what changed after my fix?
INP availability
- Field (CrUX)
- Reported, because real interactions exist.
- Lab (Lighthouse / PSI)
- Not measurable without real user input; TBT is the lab proxy.
Freshness
- Field (CrUX)
- Daily CrUX API is a 28-day rolling average updated daily around 04:00 UTC; History API updates Mondays to the previous Saturday.
- Lab (Lighthouse / PSI)
- Immediate — reflects the moment of the run and the Lighthouse version used.
Coverage
- Field (CrUX)
- Only publicly discoverable, sufficiently popular URLs and origins with eligible users and enough samples.
- Lab (Lighthouse / PSI)
- Any URL the runner can load, including staging and unpopular pages.
Reporting rule
- Field (CrUX)
- Use for assessment: whether the experience is good, needs improvement or poor.
- Lab (Lighthouse / PSI)
- Use for diagnosis and verification: what to change, and whether the change worked.
Storing that separation is what keeps it true. The record below is an illustrative Connector Scout design, not a Google schema: field and lab are sibling namespaces that are never merged or averaged, each field value carries its exact collection window, form factor and granularity, each lab value carries its Lighthouse version and environment, and unavailable data is stored as its own state rather than as a zero.
{ "recordId": "cwv:example.com/pricing:2026-07-28", "note": "Illustrative Connector Scout record design, not a Google schema. FIELD and LAB are sibling namespaces and are never merged or averaged.", "page": { "requestedUrl": "https://example.com/pricing", "template": "pricing" }, "field": { "source": "crux", "api": "chromeuxreport.googleapis.com/v1/records:queryRecord", "availability": "available", "scope": "url", "requestedUrl": "https://example.com/pricing", "normalizedUrl": "https://example.com/pricing", "urlNormalizationDetails": { "originalUrl": "https://example.com/pricing?ref=nav",Documented access routes
| Route | What it returns | Connector Scout recommendation |
|---|---|---|
| CrUX API | POST to `https://chromeuxreport.googleapis.com/v1/records:queryRecord` with an API key. Returns histograms, fractions and p75 percentiles for CLS, LCP, INP, FCP, experimental TTFB, round-trip time and LCP image subparts, for a URL or an origin, optionally by form factor. Data is a 28-day rolling average updated daily around 04:00 UTC with no SLA, and the API is limited to 150 queries per minute per Google Cloud project, offered without charge and not payable to increase. | The daily field-assessment source. One scheduled query per tracked URL or origin and form factor, persisted with its collection period. |
| CrUX History API | Same request body plus an optional `collectionPeriodCount` between 1 and 40 (default 25). Updated each Monday around 04:00 UTC, holding up to the previous Saturday, one weekly collection period across the previous 40 weeks. | Weekly trend context and the answer to 'is this new?'. Pull it weekly, not daily — daily calls cannot produce new weekly periods. |
| PageSpeed Insights API | Returns Lighthouse lab results and, where available, CrUX field data for the same URL in one response. The get-started page states the API can be used with or without an API key, although a key is recommended for frequent, automated queries, and describes the real-world data half as soon to be discontinued. Field INP is returned under `INTERACTION_TO_NEXT_PAINT`; the earlier `EXPERIMENTAL_INTERACTION_TO_NEXT_PAINT` key was removed on 8 August 2023. PSI and its API were updated to Lighthouse 13.0 on 20 October 2025. | Lab diagnosis and verification. Do not build a scheduled dependency on the PSI field half, which Google documents as planned for discontinuation — take field data from the CrUX and CrUX History APIs instead. If a PSI response is stored, keep its lab and field halves in separate namespaces. |
| Lighthouse (CLI, Node, DevTools, CI) | A synthetic audit run under your own configuration, with performance, accessibility, SEO and best-practices categories and detailed opportunities and diagnostics. | Reproduction and verification against a fixed configuration you control. Pin the Lighthouse version so a score change means a page change. |
| Search Console Core Web Vitals report | Google's own grouping of URLs into good, needs improvement and poor status, based on CrUX field data, with a validation workflow. Search Console Help documents that URLs are grouped by similar pages and reported separately for mobile and desktop, that only indexed URLs are included, and that reporting is based on a sample rather than the full URL inventory. | The reconciliation surface when the field and lab picture disagrees. Read a group status as a group statement: a group's p75 can differ from any individual URL inside it. |
| First-party RUM (optional) | Your own real-user measurement, collected with the web-vitals library or an equivalent, giving per-visit context such as the LCP element, the interaction target, page template, geography and logged-in state. | Connector Scout guidance, not a Google requirement: supplementary field evidence for segments and interaction context CrUX cannot express. Keep it in its own source label — CrUX and first-party RUM sample different populations by different methods, so the two can legitimately disagree and must never be merged into one number. |
Documented access routes for Core Web Vitals data. Capabilities from Google and Chrome documentation; the recommended use of each is Connector Scout guidance.
CrUX API
- What it returns
- POST to `https://chromeuxreport.googleapis.com/v1/records:queryRecord` with an API key. Returns histograms, fractions and p75 percentiles for CLS, LCP, INP, FCP, experimental TTFB, round-trip time and LCP image subparts, for a URL or an origin, optionally by form factor. Data is a 28-day rolling average updated daily around 04:00 UTC with no SLA, and the API is limited to 150 queries per minute per Google Cloud project, offered without charge and not payable to increase.
- Connector Scout recommendation
- The daily field-assessment source. One scheduled query per tracked URL or origin and form factor, persisted with its collection period.
CrUX History API
- What it returns
- Same request body plus an optional `collectionPeriodCount` between 1 and 40 (default 25). Updated each Monday around 04:00 UTC, holding up to the previous Saturday, one weekly collection period across the previous 40 weeks.
- Connector Scout recommendation
- Weekly trend context and the answer to 'is this new?'. Pull it weekly, not daily — daily calls cannot produce new weekly periods.
PageSpeed Insights API
- What it returns
- Returns Lighthouse lab results and, where available, CrUX field data for the same URL in one response. The get-started page states the API can be used with or without an API key, although a key is recommended for frequent, automated queries, and describes the real-world data half as soon to be discontinued. Field INP is returned under `INTERACTION_TO_NEXT_PAINT`; the earlier `EXPERIMENTAL_INTERACTION_TO_NEXT_PAINT` key was removed on 8 August 2023. PSI and its API were updated to Lighthouse 13.0 on 20 October 2025.
- Connector Scout recommendation
- Lab diagnosis and verification. Do not build a scheduled dependency on the PSI field half, which Google documents as planned for discontinuation — take field data from the CrUX and CrUX History APIs instead. If a PSI response is stored, keep its lab and field halves in separate namespaces.
Lighthouse (CLI, Node, DevTools, CI)
- What it returns
- A synthetic audit run under your own configuration, with performance, accessibility, SEO and best-practices categories and detailed opportunities and diagnostics.
- Connector Scout recommendation
- Reproduction and verification against a fixed configuration you control. Pin the Lighthouse version so a score change means a page change.
Search Console Core Web Vitals report
- What it returns
- Google's own grouping of URLs into good, needs improvement and poor status, based on CrUX field data, with a validation workflow. Search Console Help documents that URLs are grouped by similar pages and reported separately for mobile and desktop, that only indexed URLs are included, and that reporting is based on a sample rather than the full URL inventory.
- Connector Scout recommendation
- The reconciliation surface when the field and lab picture disagrees. Read a group status as a group statement: a group's p75 can differ from any individual URL inside it.
First-party RUM (optional)
- What it returns
- Your own real-user measurement, collected with the web-vitals library or an equivalent, giving per-visit context such as the LCP element, the interaction target, page template, geography and logged-in state.
- Connector Scout recommendation
- Connector Scout guidance, not a Google requirement: supplementary field evidence for segments and interaction context CrUX cannot express. Keep it in its own source label — CrUX and first-party RUM sample different populations by different methods, so the two can legitimately disagree and must never be merged into one number.
The daily field request is a single documented call: POST https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=YOUR_API_KEY with either a url or an origin in the JSON body and an optional form factor. The trend request uses the same body against the History API plus an optional collectionPeriodCount between 1 and 40, which defaults to 25.
Percentiles, collection periods, eligibility and limits
The 75th percentile is the assessment, not the average
Every field number carries a collection period
Field data exists only for eligible URLs and users
URL-level and origin-level data are different questions
Segment by form factor before comparing anything
Label PSI URL-to-origin fallback explicitly
Store requested and normalized URLs
Search Console reports groups, not individual URLs
First-party RUM is supplementary, not a CrUX replacement
Missing data is a state, never a value
Single-page apps under-report route transitions
Handle rate limits as incomplete evidence
One lab run is a sample, not a measurement
Reading the metrics
Core Web Vitals and supporting metrics — definitions and thresholds from Google and Chrome documentation, failure modes and pairing rules from Connector Scout
Largest Contentful Paint (LCP)
Field · good ≤ 2.5s- Measures
- Render time of the largest image or text block visible in the viewport, relative to when the page started loading.
- Why it matters
- It is the loading Core Web Vital and the clearest proxy for when the page felt useful. CrUX reports it with a p75 percentile and LCP image subparts — TTFB, resource load delay, resource load duration and element render delay.
- Misleading when
- Read as a single cause. A p75 regression can come from any one subpart, and a change in which element is largest — a new hero, a swapped banner — changes what the metric is timing.
AnswersDid the largest above-the-fold element get slower, or did it change identity?
Interaction to Next Paint (INP)
Field · good ≤ 200ms- Measures
- How long the page takes to paint after user interactions across the whole visit, reported as a single representative value rather than a single interaction.
- Why it matters
- It is the responsiveness Core Web Vital, covering input delay, event processing and presentation delay. It is the only one of the three that requires real user input to exist.
- Misleading when
- Compared with a lab number. Lighthouse cannot measure INP without real interactions; Total Blocking Time is a lab diagnostic that correlates with responsiveness, not a substitute for INP.
AnswersWhich interaction on which template is slow, and can it be reproduced by hand?
Cumulative Layout Shift (CLS)
Field · good ≤ 0.1- Measures
- The largest burst of unexpected layout shifts during the page's lifespan, scored as a unitless value.
- Why it matters
- It is the visual-stability Core Web Vital, and it catches the failures users describe as the page moving under them.
- Misleading when
- Assumed to be reproducible in a lab run. Shifts caused by late third-party content, personalized blocks, consent banners or interaction-dependent content may never appear in one synthetic load.
AnswersWhich burst dominates the score, and does it depend on real-user conditions?
Time to First Byte (TTFB)
Field diagnostic- Measures
- Time to the first byte of the response. CrUX exposes it as
experimental_time_to_first_byte, and also as an LCP image subpart. - Why it matters
- It separates server and network delivery from client-side rendering when LCP moves, and it is the first subpart to check.
- Misleading when
- Treated as a Core Web Vital. It is a supporting diagnostic, and a good TTFB does not protect LCP if render or resource delays dominate.
First Contentful Paint (FCP)
Field diagnostic- Measures
- When the first content of any kind is painted. CrUX reports it with a p75 percentile.
- Why it matters
- Useful for localising an LCP regression to early render versus the specific largest element.
- Misleading when
- Reported as a user outcome. FCP can improve while the meaningful content still arrives late.
Total Blocking Time (TBT)
Lab only- Measures
- Main-thread blocking time in a synthetic Lighthouse run, under that run's configured throttling and device emulation.
- Why it matters
- It is the practical lab handle on responsiveness work — a reproducible number to move while INP is only observable in the field.
- Misleading when
- Written into a brief as if it were a Core Web Vital, or compared with field INP. It belongs in the lab namespace and nowhere else.
Lighthouse performance score
Lab only- Measures
- A weighted composite of lab audits from one synthetic run in one configured environment.
- Why it matters
- Convenient for tracking a reproducible build over time in CI, where the environment is held constant.
- Misleading when
- Used as the headline in an SEO brief. It is not a Core Web Vitals assessment, it varies between Lighthouse versions — PSI moved to Lighthouse 13.0 on 20 October 2025 — and Google states good tool results do not guarantee rankings.
Worked evidence chains
Field p75 LCP for a template's URLs moves from good to needs improvement on mobile, pinned multi-run Lighthouse LCP worsens for the same template, and the hypothesis is a loading regression — with attribution limited by the overlapping rolling windows.
- 01
CrUX p75 LCP on PHONE crosses 2.5s for the tracked URL
CrUX APIThe daily CrUX query for that URL and
formFactor: PHONEreturns p75 LCP above 2.5 seconds with the band recorded as needs improvement, while DESKTOP for the same URL stays in the good band. ThecollectionPeriodfirstDate and lastDate are stored with the value. - 02
Pinned multi-run Lighthouse LCP for the same template also worsens
LighthouseThree Lighthouse runs at one pinned version, in one recorded environment, give a median lab LCP materially higher than the previous median for the same template — a lab observation kept in the lab namespace and never compared numerically with the field p75.
- 03
Band distance and lab delta, computed from stored records
DerivedHow far the field p75 sits above 2.5 seconds, the change in the poor-bucket histogram density, and the change in the lab median LCP across pinned runs — each labeled with its own source and window rather than averaged together.
- 04
A loading regression on this template, most likely in the LCP element's delivery
HypothesisField and lab both moved in the same direction on the same template after a template or image release, which is consistent with the largest element becoming slower to fetch or render. It is a hypothesis: neither source names a cause.
- 05
Attribution is bounded by the collection windows
MethodDaily CrUX windows share 27 of 28 days, and weekly History points are themselves overlapping 28-day windows that share three weeks with their neighbours. They can narrow a candidate interval; they cannot date a release or identify a cause. The interval must be intersected with the release history rather than read as a date.
- 06
Confirm the LCP element, the network trace and the release history
ValidationIdentify the LCP element in the current lab run and check whether its identity changed; read the network trace and the LCP subparts to separate TTFB from resource load delay, resource load duration and render delay; and match the candidate interval against deploys touching that template or its images.
ConclusionA loading regression on this template is the best-supported hypothesis, corroborated independently in field and lab. It is not yet attributed to a specific release, and the rolling windows cannot supply that attribution — the release-history check and the LCP-element and network inspection must close it.
Two independent namespaces moved in the same direction on the same template, which is stronger than either alone. Confidence is capped below high because the rolling, overlapping windows cannot date the change, the LCP element identity has not yet been re-verified, and CDN or network conditions were not independently measured.
Field INP degrades on mobile for one template while pinned lab runs show higher Total Blocking Time and more long tasks. The hypothesis is main-thread JavaScript — and TBT is explicitly not INP.
- 01
CrUX p75 INP on PHONE moves into a worse band for the template
CrUX APIThe stored field record shows
interaction_to_next_paintp75 rising past 200 milliseconds with its histogram density shifting into the 200–500ms bucket, for that URL, that form factor and that recorded collection window. - 02
Pinned Lighthouse runs show higher TBT and additional long tasks
LighthouseMedian TBT across three runs at a pinned Lighthouse version rises, and the long-tasks and JavaScript-execution audits list more main-thread work. web.dev documents TBT as a lab metric; it is stored in the lab namespace only.
- 03
Field INP delta and lab TBT delta, held separately
DerivedThe change in field p75 INP and the change in median lab TBT are each computed within their own namespace and reported as two numbers. There is no ratio between them and no combined score: TBT is not INP and cannot be converted into it.
- 04
Main-thread JavaScript on this template is delaying the next paint after input
HypothesisRising lab main-thread work alongside worse real-user responsiveness is consistent with script work — a new handler, a heavier bundle, or a third party — occupying the main thread when users interact. Correlation across two namespaces, not a demonstrated cause.
- 05
Reproduce the real interactions and read field interaction context
ValidationPerform the actual interactions on the affected device class and profile the main thread while doing so; then use first-party RUM or the web-vitals attribution build to see which interaction targets and which phase — input delay, processing, presentation — dominate for real users. CrUX alone cannot name the interaction.
ConclusionReport a responsiveness regression on this template with main-thread JavaScript as the leading hypothesis, stating plainly that TBT localises main-thread work but is not a measurement of INP. The claim stands or falls on the hand-reproduced interaction and the field interaction context.
The two signals agree in direction but come from different populations and measurement methods, and no specific interaction has been identified yet. Confidence stays moderate until a real interaction is reproduced and field attribution names the target and phase.
Real-user CLS degrades while pinned Lighthouse CLS run today is unchanged. The hypothesis is a post-load or real-user-only shift that the synthetic run never receives.
- 01
CrUX p75 CLS rises for the template on PHONE
CrUX APIThe stored field record shows
cumulative_layout_shiftp75 above 0.1 with density moving out of the good bucket, for the recorded URL, form factor and collection window. - 02
A fresh pinned lab run reports CLS effectively unchanged
LighthouseThree Lighthouse runs today at a pinned version, with the environment recorded, give a median lab CLS at the same near-zero value as before. The lab is not contradicting the field; it is answering a different question about a different load.
- 03
The size of the field-only divergence
DerivedThe field p75 CLS delta and the share of loads now in the needs-improvement and poor buckets, alongside the flat lab median stored separately. The gap between namespaces is described, never resolved by averaging.
- 04
A post-load or real-user-only shift is not reproduced in the lab run
Hypothesisweb.dev documents CLS as the largest session window of unexpected shifts across the page's lifespan, so shifts that occur after the synthetic run ends — or only under real-user conditions — can raise field CLS while lab CLS stays flat.
- 05
Check dynamic components, ads, consent flows and shifts during interaction
ValidationReproduce with the real consent flow and third parties enabled, scroll and interact rather than only loading, and inspect late-injected or personalized components, unsized ad and embed slots, and layout changes triggered by interaction. First-party RUM shift attribution, where available, names the element.
ConclusionReport a real-user visual-stability regression that the current lab configuration does not reproduce, and treat the flat lab number as evidence about the lab run rather than evidence against the field. The fix cannot be specified until the shifting element is identified under real-user conditions.
The field signal is a valid assessment and the lab/field divergence is itself expected for CLS, but no specific shifting element has been identified and the responsible condition — consent, ads, personalisation or interaction — remains open.
Clicks drop in Search Console while field LCP, INP and CLS hold their bands. Performance is not corroborated as the cause, and the investigation returns to the search layer.
- 01
Search Console clicks fall for the affected pages
Search ConsoleThe Search Analytics data for those pages shows a sustained click decline over a defined date range, read at page and query level rather than site total.
- 02
Field p75 LCP, INP and CLS remain in the same bands
CrUXThe stored CrUX records for the same URLs and form factors show no band change and no step in the weekly History series across the same interval, with collection windows recorded.
- 03
Click delta against unchanged field bands
DerivedThe click and impression change per page and per query, set beside the unchanged p75 values and bands. The two series stay in their own namespaces; no performance-to-clicks ratio is computed.
- 04
Something other than page performance moved demand or visibility
HypothesisWith the performance layer stable, the leading hypotheses are search-side: lost impressions, ranking movement, SERP-feature or layout changes, seasonality, or cannibalisation between pages.
- 05
Return to query, page, impression and position evidence
ValidationSplit impressions from position by query and page, check indexing and canonical state, compare against the same period last year, and only revisit performance if a field band later changes. Note also that Search Console groups similar URLs and samples indexed URLs, so group status is not per-URL truth.
ConclusionPerformance is not corroborated as the cause of the click decline and should be stated as ruled out for now, not as innocent forever. The investigation belongs in the Search Console layer — queries, impressions, positions and indexing.
The negative finding is well supported because stable field bands across the same interval are directly verifiable. It falls short of certainty because a change too recent or too small to move a 28-day p75, or one confined to a segment CrUX cannot express, cannot be excluded.
A performance score falls in the dashboard while CrUX p75 for all three metrics holds steady, and the drop coincides with the PSI move to Lighthouse 13.0.
- 01
PSI performance score falls sharply for tracked URLs
PSIThe lab score drops across several unrelated templates at once, which is unusual for a page-level change.
- 02
CrUX p75 LCP, INP and CLS are unchanged
CrUXThe field assessment for the same URLs and form factor stays in the same bands across the period, with no step in the weekly history.
- 03
The drop coincides with a documented tooling change
PSI release notesThe PSI release notes record that PSI and the API moved to Lighthouse 13.0 on 20 October 2025, so lab scores either side of that date are not directly comparable.
- 04
Real users are unaffected so far as the field can tell
MethodField data is the assessment layer, and it shows no change. A lab-only movement across a version boundary is a measurement change until field data says otherwise.
ConclusionThis is most likely a measurement change rather than a user-experience change, and it should not be reported as a Core Web Vitals regression. Re-baseline the lab series at the new version and keep watching field data, which lags by its 28-day rolling window.
The pattern — simultaneous across templates, absent from field data, coincident with a documented version change — is strong, but a real regression too new to surface in a 28-day rolling window cannot be excluded yet.
A tracked URL returns no CrUX record, and the correct response is a coverage statement plus a lab-only, clearly labeled diagnosis.
- 01
The CrUX query for the URL returns no record
CrUX APIThe URL-level query yields nothing, while the origin-level query for the same site returns data.
- 02
Eligibility, not performance, is the documented reason
CrUX methodologyCrUX methodology requires a page to be publicly discoverable and sufficiently popular, with enough eligible users. A missing record says the page did not meet those criteria.
- 03
Origin data cannot substitute for the page
MethodAn origin aggregate describes the site, not this template. Reporting it as the page's experience would silently change the question being answered.
- 04
Lab evidence is available and must be labeled as lab
LighthouseA median of three pinned Lighthouse runs can still identify concrete opportunities, and INP simply cannot be assessed for this page.
ConclusionReport the page as having no field assessment available, give the lab findings explicitly as lab-only diagnosis, and state that responsiveness cannot be assessed for it. Do not present origin data as the page's experience.
The absence of a record and the documented eligibility criteria are both verifiable directly, and the conclusion is a statement about coverage rather than about cause.
Common diagnostic patterns
Connector Scout editorial guidance — recurring performance shapes, the explanation each usually supports, and the check that settles it
LCP regression from the largest element itself
Confidence 70% — Moderate confidence- CrUX: p75 LCP (mobile) increased
- CrUX: LCP resource load duration increased
- CrUX: experimental TTFB unchanged
- Usually means
- The largest above-the-fold element changed, grew, or lost its priority hint or preload, so fetching it now dominates LCP.
- Rule out first
- A server or CDN slowdown (TTFB would move), a change in which element is largest, and a device-mix shift toward slower hardware.
- Next check
- Compare the LCP element and its bytes in a pinned lab run today against the release history for the candidate interval the weekly History series narrows to — overlapping weekly windows narrow an interval, they do not date a release.
Delivery-side LCP regression
Confidence 65% — Moderate confidence- CrUX: p75 LCP increased
- CrUX: experimental TTFB increased
- CrUX: p75 FCP increased
- Usually means
- Server response or network delivery slowed, pushing every downstream paint later regardless of page weight.
- Rule out first
- A page-weight change (subparts other than TTFB would dominate) and a geographic traffic shift that changes the network profile of the audience.
- Next check
- Confirm with server-side response-time monitoring and CDN logs for the same window; the field data cannot separate origin from edge.
Responsiveness problem confined to one template
Confidence 65% — Moderate confidence- CrUX: p75 INP (mobile) increased
- Lighthouse: Total Blocking Time increased
- CrUX: p75 LCP unchanged
- Usually means
- Main-thread work introduced by a script or an interaction handler on that template is delaying the paint after user input.
- Rule out first
- A third-party script rolled out site-wide (other templates would move too) and a device-mix change toward lower-end hardware.
- Next check
- Reproduce the interaction by hand on the affected device class and profile the main thread; TBT localises the work but is not the INP value.
CLS driven by late or conditional content
Confidence 60% — Moderate confidence- CrUX: p75 CLS increased
- Lighthouse: CLS (lab) unchanged
- CrUX: p75 LCP unchanged
- Usually means
- Content that a synthetic run does not receive — a consent banner, a personalized block, a late ad or an unsized embed — is shifting layout for real users inside one session window.
- Rule out first
- A lab configuration that suppresses the offending content, and a change confined to one geography where a consent flow differs.
- Next check
- Reproduce with the real consent flow and third parties enabled, then attribute shifts to the specific burst rather than to the page as a whole.
Lab-only movement across templates
Confidence 70% — Moderate confidence- PSI: Performance score decreased
- CrUX: p75 LCP, INP, CLS unchanged
- CrUX History: Weekly trend unchanged
- Usually means
- A tooling or environment change — such as the 20 October 2025 move to Lighthouse 13.0, a runner change, or throttling variance — rather than a change to the pages.
- Rule out first
- A genuine regression too recent to appear in a 28-day rolling window, and a site-wide deploy that field data has not yet absorbed.
- Next check
- Re-run the lab check three times at a pinned Lighthouse version and re-baseline, then re-read field data after a full collection period has passed.
Core Web Vitals analyst checklist (Connector Scout editorial guidance)
01Decide which question you are asking before you pull anything
Field data assesses experience; lab data diagnoses and verifies. Choosing the wrong one is the most common failure in this layer.
- Write the question as either 'how did eligible users experience this?' or 'what is slow in this run?'.
- Name the URL or origin and the form factor before querying — the answer differs for each.
- Decide up front what result would change the recommendation, including a null result.
02Set up access and quota handling before the first scheduled pull
- Take scheduled field data from the CrUX and CrUX History APIs, not from the PSI field half, which Google documents as planned for discontinuation.
- Restrict each API key to the single API it is used for, and monitor quota use against the documented 150 CrUX queries per minute per Google Cloud project.
- Treat the PSI API key as recommended for frequent automated querying rather than required, and still use one for any scheduled job.
- Read field INP from
INTERACTION_TO_NEXT_PAINT; the earlierEXPERIMENTAL_INTERACTION_TO_NEXT_PAINTkey no longer exists in the response.
03Pull field data with its context attached
- Query the CrUX API per tracked URL or origin and per form factor, and store the exact collection window —
firstDateandlastDate— with every value. - Store the requested URL, the returned normalized URL and any URL-normalization details, so a 'missing' page can be distinguished from a normalization mismatch.
- Record whether the record is URL-level or origin-level and never attach origin data to a URL row.
- Keep PHONE and DESKTOP as separate assessment series and carry TABLET as its own labeled series or state that it was excluded — never fold it silently into another class.
- Pull the History API weekly, not daily, and set
collectionPeriodCountdeliberately — the default returns 25 of the available 40 periods. - Record p75 values and the good / needs-improvement / poor bands, never a mean.
- Retain the raw API response alongside the parsed values so a past brief can be reconstructed and re-audited.
- When no record, no metric or too few eligible samples are returned, store 'unavailable' as a distinct state from zero, good or unchanged.
- Query the CrUX API per tracked URL or origin and per form factor, and store the exact collection window —
04Run lab checks reproducibly
- Pin the Lighthouse version and store it with every result, together with the environment settings — strategy, screen emulation, throttling method and benchmark index; PSI moved to Lighthouse 13.0 on 20 October 2025.
- Run at least three times and report the median, treating a single run as a sample.
- Store the requested URL and the final URL for each run, plus any run warnings or runtime error.
- Keep lab metrics in their own namespace — TBT and the performance score never sit in a Core Web Vitals table.
- Note that INP has no lab equivalent, and say so rather than substituting a proxy.
05Compare like with like
- Never compare a lab number with a field number, or a field value from one form factor with another.
- Check whether URL-level or origin-level data was returned before reading a template-level conclusion.
- Treat adjacent daily windows as highly overlapping — consecutive 28-day windows share 27 days — and weekly History points as overlapping windows sharing three weeks; use them to narrow a candidate interval, never to date a release.
- Corroborate across sources before naming a cause, and state plainly when a second source does not corroborate the first.
- Treat single-page-app route data as structurally incomplete, per CrUX methodology.
06Report performance as one layer of evidence
- State the field assessment first, then the lab diagnosis, clearly labeled as separate namespaces.
- Label every step as a verified fact, a calculated metric, a hypothesis or a required validation, and never let a hypothesis travel without its validation step.
- Do not claim a ranking effect: Google says Core Web Vitals are used by its ranking systems but that good scores do not guarantee rankings and relevance remains primary.
- Pair a performance claim with the search and analytics layers before implying business impact.
- Name the reproduction step and the release-history check that would confirm or kill the hypothesis.
- Put the finished brief through human review before it reaches a stakeholder or a backlog.
Normalize Your Data#
Every source in this guide describes performance differently. Normalization builds one consistent analytical layer across them — a shared record envelope, source-specific dimensions and metrics, a canonical page-identity table, and explicit comparison records — without pretending the sources measure the same thing.
Search Console organises rows around search dimensions such as date, query, page, country and device. GA4 reports combinations of dimensions and metrics. Clarity contributes aggregated behavioral signals. Ahrefs and Semrush provide vendor-defined search and link estimates. CrUX reports field performance over a rolling collection period.
If raw responses go straight to an AI model, two failures follow almost immediately: identical concepts arrive under different names, and incompatible periods or grains get compared as though they were equivalent. Normalization removes both failure modes by giving every record the same envelope, the same identifiers and the same explicit statement of what it covers.
The instinct to force all providers into one flat table is the mistake to avoid. Instead, normalize in four layers: a shared record envelope carrying provenance, identity, period and quality; source-specific dimensions and metrics kept in their own namespaces; a canonical page-identity table used for page joins; and comparison records calculated after ingestion rather than inferred at read time. Records must not be joined until their grains are compatible.
The schema, naming rules, baselines and validation steps in this chapter are Connector Scout implementation recommendations, not provider requirements. The behavior of each source — its row shapes, time models and documented limits — comes from the primary documentation linked at the end of the chapter.
Preserve each record’s grain
A record’s grain is the exact level one row represents. Write it down before anything else, because every join, comparison and aggregation downstream depends on it.
- Search Console: property × date × page × query × country × device.
- Google Analytics 4: property × date × landing page × device category.
- Microsoft Clarity: project × requested date range × URL.
- Ahrefs and Semrush domain metrics: domain × observation date.
- CrUX: URL or origin × form factor × collection period.
A Search Console page-and-query row must be aggregated to page level before it is joined to a page-level GA4 row. Skip that step and GA4 metrics are duplicated once per query. Storing the grain on the record makes the requirement explicit: "grain": ["date", "page", "query", "country", "device"].
| Source | Example grain | Time model | Join caution |
|---|---|---|---|
| Google Search Console | Property × date × page × query × country × device | Calendar date, or hour, depending on the request | Top-row limits and omitted no-data dates mean missing is not necessarily zero. |
| Google Analytics 4 | Property × date × requested dimensions | Property reporting time zone | Adding dimensions changes the grain; do not repeat session-scoped metrics across lower-level rows. |
| Ahrefs | Target × observation date × endpoint dimensions | Snapshot, or an endpoint-defined historical interval | Keep values attributed to Ahrefs and preserve the mode, country and endpoint they came from. |
| Semrush | Database × target or keyword × display date × device | Daily or monthly depending on the report | Preserve database, device and display-date semantics on every row. |
| Microsoft Clarity | Project × requested date range × dimensions | Requested dashboard interval | Do not treat aggregated dashboard exports as GA4 event rows. |
| CrUX | URL or origin × form factor × collection period | Rolling collection period | Do not compare a rolling collection period as if it were a single-day measurement. |
Source-grain matrix. Row shapes and time models are documented by each provider; the join cautions are Connector Scout editorial guidance.
Google Search Console
- Example grain
- Property × date × page × query × country × device
- Time model
- Calendar date, or hour, depending on the request
- Join caution
- Top-row limits and omitted no-data dates mean missing is not necessarily zero.
Google Analytics 4
- Example grain
- Property × date × requested dimensions
- Time model
- Property reporting time zone
- Join caution
- Adding dimensions changes the grain; do not repeat session-scoped metrics across lower-level rows.
Ahrefs
- Example grain
- Target × observation date × endpoint dimensions
- Time model
- Snapshot, or an endpoint-defined historical interval
- Join caution
- Keep values attributed to Ahrefs and preserve the mode, country and endpoint they came from.
Semrush
- Example grain
- Database × target or keyword × display date × device
- Time model
- Daily or monthly depending on the report
- Join caution
- Preserve database, device and display-date semantics on every row.
Microsoft Clarity
- Example grain
- Project × requested date range × dimensions
- Time model
- Requested dashboard interval
- Join caution
- Do not treat aggregated dashboard exports as GA4 event rows.
CrUX
- Example grain
- URL or origin × form factor × collection period
- Time model
- Rolling collection period
- Join caution
- Do not compare a rolling collection period as if it were a single-day measurement.
Use a shared record envelope
The envelope answers the provenance questions an analyst has to be able to ask of any number: where did this come from, what does it identify, what period does it describe, how complete is it, and when was it retrieved? Those answers live in the same place for every source. Only the dimensions, metrics, entity_key and quality contents vary by source.
{ "schema_version": "1.0.0", "record_id": "gsc:sc-domain:example.com:2026-07-27:sha256…", "source": "google_search_console", "source_report": "search_analytics", "property_id": "sc-domain:example.com", "entity_type": "page_query", "entity_key": { "page": "https://example.com/guides/ai-seo/", "query": "ai seo workflow" }, "grain": ["date", "page", "query", "country", "device"], "period": { "start": "2026-07-27", "end": "2026-07-27", "timezone": "America/Chicago",The example above is an illustrative Connector Scout design, not a provider schema. Note the quality block: Google’s Search Analytics documentation states that the API does not guarantee every matching row, that responses may be limited to top rows, and that dates with no data are omitted when results are grouped by date. Your records therefore have to distinguish a reported zero from an absent row.
Standardize identifiers and names
| Field | Rule |
|---|---|
| Source | Lowercase snake_case, e.g. google_search_console. |
| Metric | Lowercase snake_case, e.g. engagement_rate. |
| Date | ISO 8601 date, e.g. 2026-07-27. |
| Timestamp | ISO 8601 in UTC, e.g. 2026-07-30T11:05:00Z. |
| Country | ISO 3166-1 alpha-2 where the source allows it. |
| Device | Controlled vocabulary: desktop, mobile, tablet, unknown. |
| Page | Absolute canonical URL. |
| Property | Preserve the provider's own identifier verbatim. |
| Ratio | Decimal between 0 and 1, never a pre-formatted percentage string. |
| Duration | Integer milliseconds. |
| Bytes | Integer bytes. |
Naming and formatting rules for the normalized layer. These are Connector Scout implementation recommendations, not provider requirements.
Source
- Rule
- Lowercase snake_case, e.g. google_search_console.
Metric
- Rule
- Lowercase snake_case, e.g. engagement_rate.
Date
- Rule
- ISO 8601 date, e.g. 2026-07-27.
Timestamp
- Rule
- ISO 8601 in UTC, e.g. 2026-07-30T11:05:00Z.
Country
- Rule
- ISO 3166-1 alpha-2 where the source allows it.
Device
- Rule
- Controlled vocabulary: desktop, mobile, tablet, unknown.
Page
- Rule
- Absolute canonical URL.
Property
- Rule
- Preserve the provider's own identifier verbatim.
Ratio
- Rule
- Decimal between 0 and 1, never a pre-formatted percentage string.
Duration
- Rule
- Integer milliseconds.
Bytes
- Rule
- Integer bytes.
Pair the naming rules with a metric dictionary, so every normalized metric records the provider field it came from, its type and unit, and how it must be aggregated.
{ "engagement_rate": { "source": "google_analytics_4", "source_field": "engagementRate", "type": "ratio", "unit": "decimal", "aggregation": "weighted_recalculation", "definition_owner": "provider", "notes": "Recalculate from engaged_sessions / sessions when aggregating; never average across rows." }}Build a canonical page-identity table
Page-level joins should reference a page identifier, never a raw URL string. One row per page holds the canonical URL, the variants observed in the wild, and the grouping attributes your analysis needs.
{ "page_id": "pg_7f3c1a", "canonical_url": "https://example.com/guides/ai-seo/", "observed_urls": [ "https://example.com/guides/ai-seo/", "https://example.com/guides/ai-seo", "https://www.example.com/guides/ai-seo/?utm_source=newsletter" ], "path": "/guides/ai-seo/", "host": "example.com", "page_group": "guides", "locale": "en-US", "status": "active"}- Parse the URL rather than editing it as a string.
- Lowercase the scheme and hostname only.
- Remove the fragment.
- Remove only the tracking parameters on your documented list.
- Apply your own documented host and trailing-slash rules consistently.
- Resolve redirects and canonical relationships through a separate mapping step, not inside the parser.
- Store both the observed URL and the normalized URL on every record.
Separate event dates, observation dates and retrieval times
period.start and period.end
observed_at
retrieved_at
data_through
period_type
timezone
Chrome documents the CrUX API as returning a rolling 28-day collection period, so a CrUX value normally represents that window rather than a measurement taken on the retrieval date, and a new page may have fewer underlying days inside it. A rolling 28-day CrUX value and a single-day GA4 value are not equivalent quantities and must not be compared as though they were.
Retain raw data and provenance
Keep three distinct stages, each traceable to the one before it: the raw response exactly as received, the normalized record derived from it, and the calculated finding derived from the normalized record. Retain the following with every record.
- Source and endpoint or report name.
- Request parameters, with credentials and authorization headers excluded.
- Retrieval timestamp in UTC.
- A hash of the raw payload, so a stored record can be tied to the exact response it came from.
- Schema version and transformation version.
- Pagination state, including whether all pages were retrieved.
- Filters, segments and sampling or thresholding notes applied to the request.
- Any API warnings and the quality flags derived from them.
Normalize values without changing their meaning
- Parse numeric strings into numbers; never store a formatted string as a metric.
- Store ratios as decimals between 0 and 1.
- Store durations in the unit you declare in the metric dictionary, consistently.
- Store timestamps in UTC while retaining the report time zone on the record.
- Store unavailable values as null, never as zero.
- Preserve an explicit zero the source actually reported as a zero.
- Keep rankings and positions numeric, and record that lower is better.
- Label provider estimates as estimates, attributed to the provider that produced them.
- Reject NaN and infinity at validation rather than storing them.
- Store currency values with their ISO currency code.
- Retain the original value whenever a conversion would be lossy.
- Never sum CTR, engagement rate or average position; recalculate CTR as total clicks divided by total impressions, and engagement rate as engaged sessions divided by sessions.
Create explicit comparison windows
Comparisons are records the pipeline calculates after ingestion, not something the model works out while writing the brief. Use complete periods only.
| Window | Definition |
|---|---|
| Day over day | The last complete day against the previous complete day. |
| Week over week | The last complete day against the same weekday in the prior week. |
| Rolling 7 | The latest 7 complete days against the previous 7 complete days. |
| Rolling 28 | The latest 28 complete days against the previous 28 complete days. |
| Year over year | The same complete period in the prior year, with the weekday offset stated. |
| Same-weekday baseline | The latest complete day against the median of prior comparable weekdays, with the number of observations recorded. |
Comparison windows worth defining explicitly. These baselines are Connector Scout editorial recommendations, not provider definitions.
Day over day
- Definition
- The last complete day against the previous complete day.
Week over week
- Definition
- The last complete day against the same weekday in the prior week.
Rolling 7
- Definition
- The latest 7 complete days against the previous 7 complete days.
Rolling 28
- Definition
- The latest 28 complete days against the previous 28 complete days.
Year over year
- Definition
- The same complete period in the prior year, with the weekday offset stated.
Same-weekday baseline
- Definition
- The latest complete day against the median of prior comparable weekdays, with the number of observations recorded.
{ "metric": "clicks", "current_value": 842, "comparison_value": 1018, "absolute_change": -176, "percent_change": -0.1729, "baseline_method": "same_weekday_median", "baseline_observations": 8}When the comparison value is zero or missing, store percent_change as null with a stated reason rather than emitting an infinite or misleading percentage.
Record data-quality conditions
complete
partial
delayed
truncated
thresholded
missing
stale
incompatible
{ "status": "partial", "is_partial": true, "is_sampled": false, "is_thresholded": false, "is_top_rows_limited": true, "issues": [ { "code": "SOURCE_ROW_LIMIT", "severity": "warning", "message": "The source may not have returned every matching row." } ]}Two source-specific conditions are worth encoding directly. Microsoft Clarity’s Data Export API returns aggregated dashboard data, so those records are not universal event rows and must not be treated as GA4-style events. Semrush reports can be monthly or daily depending on the report, so retain the database, device and display-date semantics on every Semrush record.
Validate before analysis
Normalization validation checklist (Connector Scout editorial guidance) — a reference list for display, not a saved run state
01Structure and required fields
Connector Scout editorial guidance. This is a reference list for display, not a saved run state.
- Every required envelope field is present: schema_version, source, property_id, entity_type, grain, period, quality and retrieved_at.
- Every date and timestamp parses, and period.start is less than or equal to period.end.
- URLs parse as absolute URLs.
- The declared grain matches the dimensions actually present on the record.
02Values and ranges
- Ratios fall between 0 and 1.
- Counts are non-negative, and NaN and infinity are rejected rather than stored.
- Derived metrics reconcile with their components within a stated tolerance.
03Integrity and comparability
- Records are unique at their declared grain.
- Pagination is complete, or the record is flagged partial.
- Compared periods have matching lengths and compatible dimensions before any comparison is written.
04Safety and failure handling
- No API keys, tokens or authorization headers appear anywhere in stored records or logs.
- Invalid records are quarantined rather than repaired in place.
- Every validation failure is logged, and malformed values are never silently coerced to zero.
Quarantine invalid records and log every validation failure. Malformed values must never be silently coerced to zero.
Minimum viable normalized layer
- Immutable raw responses, stored exactly as received.
- A shared record envelope for provenance, identity, period and quality.
- Source-specific transformation mappings, one per report you consume.
- A canonical page-identity table used for every page-level join.
- A validation report produced on every run.
Schemas#
Normalization makes records comparable. Schemas make the entire workflow auditable. Define the contracts before you automate the brief so every source, calculation and finding has a predictable shape.
The schemas below are Connector Scout implementation recommendations, not provider requirements. What each source can supply — its grain, fields, limits and freshness — comes from the primary documentation consolidated at the end of the guide.
The analyst needs five schemas
- Page registry: the stable identity and business context for each canonical page.
- Source record: one normalized observation at its original grain.
- Comparison record: the deterministic calculation between two complete periods.
- Finding: the evidence, interpretation, confidence and next step for one material change.
- Run manifest: the health, coverage and tool history for one analyst run.
{ "finding_id": "2026-08-03-product-mobile-ctr", "status": "verified_change", "title": "Mobile CTR declined on the primary product page", "scope": { "page_id": "product-main", "canonical_url": "https://www.example.com/product/", "country": "USA", "device": "MOBILE", "search_type": "web" }, "comparison": {{ "run_id": "daily-seo-2026-08-03T12:00:00Z", "site": "example.com", "timezone": "America/Chicago", "started_at": "2026-08-03T12:00:00Z", "completed_at": "2026-08-03T12:07:42Z", "latest_complete_date": "2026-07-31", "status": "completed_with_warning", "sources": [ {"name": "google_search_console", "status": "complete", "rows": 18240}, {"name": "google_analytics_4", "status": "complete", "rows": 824}, {"name": "ahrefs", "status": "complete", "rows": 250},Alert Thresholds#
There is no universal SEO threshold that separates signal from noise. The thresholds below are starting recommendations, not platform rules. Calibrate them against your own historical variance, seasonality, business model and page volumes.
Use an absolute rule with every relative rule. A rise from one click to two clicks is 100%, but it is not a material business event.
Do not use the incomplete current day in primary alert logic. Google says Search Console performance data is typically available after two to three days and exposes metadata for incomplete recent data. Select the latest complete date from the source rather than assuming yesterday is complete.
An alert should pass four gates
- Completeness: both comparison periods are complete and comparable.
- Volume: the affected scope has enough data to interpret.
- Magnitude: both the relative and absolute change are meaningful.
- Relevance: the change affects a priority page, query group or business outcome — or is corroborated by another source.
| Signal | Suggested minimum in the comparison window |
|---|---|
| GSC impressions | 200 |
| GSC clicks | 25 |
| GA4 organic sessions | 50 |
| Key events in the longer baseline | 10 |
| Tracked keywords in a page or topic group | 5 |
| Clarity sessions | 30 |
| CrUX | Eligible data at the same URL/origin and form-factor scope |
Starting minimum-volume gates (Connector Scout recommendations, not platform rules). Calibrate against your own variance.
GSC impressions
- Suggested minimum in the comparison window
- 200
GSC clicks
- Suggested minimum in the comparison window
- 25
GA4 organic sessions
- Suggested minimum in the comparison window
- 50
Key events in the longer baseline
- Suggested minimum in the comparison window
- 10
Tracked keywords in a page or topic group
- Suggested minimum in the comparison window
- 5
Clarity sessions
- Suggested minimum in the comparison window
- 30
CrUX
- Suggested minimum in the comparison window
- Eligible data at the same URL/origin and form-factor scope
| Signal | Watch | Material | Critical |
|---|---|---|---|
| GSC clicks | ±15% | ±25% | ±40% |
| GSC impressions | ±20% | ±30% | ±50% |
| GSC CTR | ±15% relative and ≥0.5 percentage points | ±25% and ≥1 point | ±40% and ≥2 points |
| GSC average position | ≥1.0 positions | ≥2.0 | ≥4.0 or loss of a top-three/page-one group |
| GA4 organic sessions | ±15% | ±25% | ±40% |
| Organic key events | ±20%, with sufficient volume | ±30% | ±50% |
| Tracked keyword position | ≥3 places | ≥5 | Loss of top three or page one |
| Clarity friction-session rate | +20% | +35% | +60% |
| JavaScript-error session rate | +25% | +50% | +100% |
Starting change thresholds (Connector Scout recommendations). Every relative test is paired with an absolute one.
GSC clicks
- Watch
- ±15%
- Material
- ±25%
- Critical
- ±40%
GSC impressions
- Watch
- ±20%
- Material
- ±30%
- Critical
- ±50%
GSC CTR
- Watch
- ±15% relative and ≥0.5 percentage points
- Material
- ±25% and ≥1 point
- Critical
- ±40% and ≥2 points
GSC average position
- Watch
- ≥1.0 positions
- Material
- ≥2.0
- Critical
- ≥4.0 or loss of a top-three/page-one group
GA4 organic sessions
- Watch
- ±15%
- Material
- ±25%
- Critical
- ±40%
Organic key events
- Watch
- ±20%, with sufficient volume
- Material
- ±30%
- Critical
- ±50%
Tracked keyword position
- Watch
- ≥3 places
- Material
- ≥5
- Critical
- Loss of top three or page one
Clarity friction-session rate
- Watch
- +20%
- Material
- +35%
- Critical
- +60%
JavaScript-error session rate
- Watch
- +25%
- Material
- +50%
- Critical
- +100%
# Connector Scout starting recommendations — calibrate before automating.thresholds: minimum_volume: gsc_impressions: 200 gsc_clicks: 25 ga4_organic_sessions: 50 key_events_long_baseline: 10 tracked_keywords: 5 clarity_sessions: 30 material_change: gsc_clicks_relative: 0.25 gsc_impressions_relative: 0.30 gsc_ctr_relative: 0.25 gsc_ctr_absolute_points: 1.0 average_position_absolute: 2.0 ga4_organic_sessions_relative: 0.25 organic_key_events_relative: 0.30 rules: require_complete_periods: true require_absolute_and_relative_tests: true require_second_source_for_high_confidence: true suppress_incomplete_current_day: true maximum_daily_findings: 5priority_score = magnitude × volume_confidence × business_priority × corroboration × urgencyDiagnostic Workflow#
Every alert should follow the same diagnostic sequence. The order is deliberate: do not generate a cause before verifying that the change is real.
1. Validate the data
Confirm extraction success, complete dates, property and project IDs, time zones, filters, sampling or thresholding warnings, deployment annotations and sitewide tracking discontinuities. Stop the investigation when the evidence layer is unhealthy.
2. Localize the change
Segment by page, section, query, topic, country, device, search appearance and branded versus non-branded intent. Determine whether the pattern is sitewide, template-wide or isolated.
3. Classify the pattern
Match the observed shape of the change to the pattern table below, then retrieve the next evidence it points to. These are investigation paths, not conclusions.
4. Generate competing hypotheses
Create at least two plausible explanations. For each one, list evidence for it, evidence against it and the cheapest validation step. If the evidence supports only one narrative because alternatives were never considered, confidence is overstated.
5. Corroborate
Use a second independent evidence layer when possible. Search Console plus GA4 can confirm whether a search decline reached the site. GA4 plus Clarity can show whether a conversion decline coincided with behavioral friction. A rank provider can add context, but its estimates remain provider-attributed.
6. Prioritize the next validation step
Recommend the smallest reversible action that reduces uncertainty: inspect the URL, review the SERP, compare a deployment, watch recordings, run a crawl or draft a test. Do not jump directly from anomaly to production change.
| Pattern | Stronger first hypothesis | Next evidence to retrieve |
|---|---|---|
| Impressions down and positions down | Visibility or demand loss | Query groups, competitors, indexation and release history |
| Impressions stable, CTR down, position stable | SERP or snippet issue | Current SERP, search features, query intent and device mix |
| GSC clicks stable, GA4 sessions down | Measurement or landing experience issue | Tagging, consent, channel grouping and server logs |
| Rankings stable, key events down | Conversion or UX issue | GA4 events, Clarity friction and deployment history |
| Traffic down and friction up | Page experience may be contributing | Clarity recordings, GA4 device segments and recent releases |
| CrUX trend worsens gradually | Field-performance regression | CrUX History and targeted Lighthouse diagnostics |
Pattern classification (Connector Scout editorial guidance). These are investigation paths, not conclusions.
Impressions down and positions down
- Stronger first hypothesis
- Visibility or demand loss
- Next evidence to retrieve
- Query groups, competitors, indexation and release history
Impressions stable, CTR down, position stable
- Stronger first hypothesis
- SERP or snippet issue
- Next evidence to retrieve
- Current SERP, search features, query intent and device mix
GSC clicks stable, GA4 sessions down
- Stronger first hypothesis
- Measurement or landing experience issue
- Next evidence to retrieve
- Tagging, consent, channel grouping and server logs
Rankings stable, key events down
- Stronger first hypothesis
- Conversion or UX issue
- Next evidence to retrieve
- GA4 events, Clarity friction and deployment history
Traffic down and friction up
- Stronger first hypothesis
- Page experience may be contributing
- Next evidence to retrieve
- Clarity recordings, GA4 device segments and recent releases
CrUX trend worsens gradually
- Stronger first hypothesis
- Field-performance regression
- Next evidence to retrieve
- CrUX History and targeted Lighthouse diagnostics
System Prompt#
The system prompt is the standing contract for every run. It fixes the analyst as read-only, forces evidence labeling, and defines the output the brief must satisfy.
This prompt is Connector Scout editorial guidance. Adapt the property names, thresholds and owners to your own setup, but keep the read-only rules, the evidence separation and the human-review requirement intact.
You are a read-only Daily AI SEO Analyst.Your job is to identify material organic-search changes, validate the underlying data, investigate likely causes, and recommend the smallest useful next validation step for a human reviewer.OPERATING RULES1. Use only connected tools and supplied data.2. For every material claim, state the source, property or project, date range, dimensions, filters, and retrieval time.3. Separate four evidence types: - VERIFIED FACT: stated directly by retrieved data. - CALCULATION: derived transparently from retrieved data. - HYPOTHESIS: a plausible explanation that still requires validation. - RECOMMENDED CHECK: the next step that would reduce uncertainty.4. Never state correlation as causation.Daily Prompt#
The daily prompt supplies the run inputs: the site, the priority scopes, the configured minimums and the comparison windows. Everything else is inherited from the system prompt.
Replace each bracketed placeholder with your own configuration before the first run. The data-health step runs first by design: an unhealthy evidence layer invalidates every finding that follows it.
Prepare today's Daily SEO Brief for [SITE].Use the most recent complete data available. Determine the latest complete date from each source before comparing performance.Compare:1. The latest seven complete days with the previous seven complete days.2. The latest seven complete days with the same weekdays four weeks earlier.3. The latest 28 complete days with the previous 28 complete days only when needed to confirm a trend.Prioritize:- Sections: [PRIORITY SECTIONS]- Primary conversions or key events: [PRIMARY OUTCOMES]- Countries: [TARGET COUNTRIES]- Devices: [TARGET DEVICES]Prompt Library#
Five reusable investigation prompts for the situations a daily brief raises most often. Each one keeps the read-only boundary and the facts-versus-hypotheses separation of the system prompt.
Investigate the organic decline for [PAGE OR SECTION].Validate complete dates and confirm that the change passes both the minimum-volume and materiality rules.Decompose the change into impressions, CTR, average position, query groups, devices, countries, GA4 organic sessions, key events, tracked keyword movement, competitor or backlink context, Clarity friction, and technical or Web Vitals signals where available.Find priority pages where Search Console CTR declined materially while average position remained within ±0.5 positions.Require at least [MINIMUM IMPRESSIONS] impressions. Segment branded and non-branded queries where possible, identify device and country concentration, and review current SERP composition and search features with the connected provider.Do not recommend a title or description change until the dominant query intent and current competing results have been reviewed.Find previously successful pages with a sustained decline across at least 28 complete days.Exclude seasonal pages, discontinued offerings, intentional redirects or noindex directives, and new pages without a valid baseline.Use Search Console, GA4 and the connected rank provider. Classify each case as demand decline, ranking decline, CTR decline, conversion decline, possible cannibalization, technical issue or insufficient evidence. Preserve provider attribution for all third-party metrics.For the listed priority organic landing pages, identify material increases in Clarity friction signals.Do not infer causation. For each page report session volume, friction-rate change, device concentration, change date, related GA4 engagement or key-event movement, and the exact recording or manual-review task a human should perform. Do not transfer raw recording or personal data into the brief.Convert the verified Daily SEO Brief into an executive update with three short paragraphs:1. What happened.2. Why it matters to the business.3. What the team is validating next.Use plain language. Retain confidence qualifiers. Exclude unverified technical speculation and do not imply that a hypothesis has been proven.Example Daily Brief#
A worked brief showing the structure, the evidence labeling and the level of restraint the workflow is designed to produce. The values are illustrative and do not describe a real site.
Section A
Data health — Good with one coverage warning
- Search Console and GA4 contain complete data through July 31.
- The Ahrefs request completed successfully for the United States database.
- Clarity was not queried during the initial scan; its limited daily request budget is reserved for targeted investigations.
- CrUX returned eligible mobile URL-level data for 12 of 18 priority pages and origin-level data for the remaining six.
- No sitewide analytics discontinuity was detected.
Section B
Overall status — Stable with one high-impact CTR risk
Section C — verified change
Finding 1 — Product-page mobile CTR declined
- Scope: /product/, United States, mobile, non-branded queries.
- Recent period: July 25–31.
- Baseline: July 18–24.
- Verified facts: Impressions increased 4%; average position changed from 4.1 to 4.2; CTR declined from 4.3% to 3.1%.
- Calculation: CTR fell 1.2 percentage points, or 27.9% relative.
- GA4 corroboration: Organic landing-page sessions declined 18% over the same period.
- Impact: High.
- Confidence that the change is real: High.
Hypothesis 1: Changed SERP composition or a less competitive snippet reduced click-through.
Evidence for: Impressions and position were stable.
Evidence against: The current mobile SERP has not yet been reviewed.
Confidence: Moderate
Hypothesis 2: A shift toward lower-intent queries reduced aggregate CTR.
Evidence for: Non-branded queries account for most of the decline.
Evidence against: Query-mix contribution has not yet been calculated.
Confidence: Low
Automation#
A scheduled analyst should automate extraction, validation, calculation and delivery — not production changes.
Google says Search Console performance data is typically available after two to three days. Build the run around the latest complete date rather than a fixed “yesterday” assumption. CrUX is updated daily but represents a rolling 28-day window, so use it as trend evidence, not an overnight alert.
Recommended daily sequence
- Query each source for its latest complete date.
- Extract and upsert the latest day at the source's native grain.
- Re-extract the previous seven days to capture late processing or revisions.
- Validate schemas, completeness, row counts and quality flags.
- Calculate comparisons and threshold tests deterministically.
- Send only candidate anomalies and the minimum supporting context to the model.
- Permit targeted read-only calls for corroboration.
- Validate the structured findings against the finding schema.
- Save the manifest, evidence references and final brief.
- Deliver the brief to the reviewer and stop.
05:45 Determine latest complete dates and available quotas06:00 Extract and backfill read-only source data06:15 Validate and normalize06:20 Calculate comparisons and candidate anomalies06:25 Run targeted AI investigation06:35 Validate finding schema and save the run manifest06:40 Deliver the brief for human reviewSecurity#
Read-only is a design boundary, not a complete security strategy.
OpenAI's official security guidance recommends least privilege, explicit consent, server-side input validation, audit logs and human confirmation for irreversible actions. It also warns that prompt injection remains relevant when models can access MCP servers and third-party data.
Security checklist
0/5 done
Troubleshooting#
The failure modes this workflow actually produces, and the documented check that resolves each one.
Minimum Viable Build#
Start with the smallest system that can produce a brief you trust.
Build in this order
- Search Console page-level daily data.
- GA4 organic landing-page daily data and one primary key event.
- A canonical page registry with business priority.
- Latest-seven, previous-seven and 28-day comparison records.
- Completeness checks and minimum-volume gates.
- The finding schema, system prompt and daily prompt.
- Manual execution and review for two weeks.
- One competitive provider only after the first-party brief is useful.
- Clarity and CrUX for targeted corroboration.
- Scheduled delivery only after thresholds produce consistently useful findings.
Calibration
Days 1–3
Calibration
Days 4–7
Calibration
Days 8–10
Calibration
Days 11–14
Calibration
After day 14
FAQ#
The questions readers ask most often about building and trusting this workflow.
Official Sources#
The consolidated primary-source list for the complete guide. Every vendor capability, endpoint, limit, quota and threshold definition above is taken from one of these pages; thresholds, schemas, prompts and cadences are Connector Scout editorial recommendations.
Next Steps#
Start with the minimum viable build. Run the analyst manually for two weeks, calibrate thresholds against real false positives, then automate delivery only after reviewers trust the brief. These pages cover the connector and permission groundwork the workflow depends on.