What SEO Operations is
Link to section “What SEO Operations is”In 30 seconds
Link to section “In 30 seconds”SEO Operations is the way an organisation runs search engine optimisation (SEO) as a programme rather than a series of favours. Requests arrive through one intake, are checked against search policy, scored, and committed only when writers, SEOs and engineers have the days to do them. Work follows written procedures and is judged by measurement that knows the limits of search data.
When it works, anyone can see what the team is doing in search and why, and what last quarter’s work changed. When it fails, an agency reports rising “visibility” while sign-ups from search fall, and a template change ships that nobody in SEO saw.
For beginners, SEO and content leads, agencies and analysts. Sources last verified 2026-10-23.
At a glance
Link to section “At a glance”| Question | Short answer |
|---|---|
| Goal | A repeatable SEO programme whose contribution to the business is measured, not asserted |
| Primary users | SEO managers and leads, content leads, marketing leaders, agency account and delivery teams, analysts |
| In scope | Intake and prioritisation, search intent as a production input, content optimisation and internal linking as a process, SOPs, capacity, reporting and its data limits, policy governance, agency versus in-house |
| Handed off | Crawling, indexing, rendering, structured data and SEO checks in CI → SEOps; the content lifecycle beyond search → ContentOps; Core Web Vitals measurement and fixes → WebOps; paid search → MarketingOps |
| Prerequisites | SEOps for the technical basics; spreadsheet skills; basic statistics help |
| Key outputs | Intake form, scored backlog, SOPs, measurement policy, monthly review, vendor policy, risk register |
| Term status | Overlapping synonym: an informal label for running SEO as a programme; no standard definition (evidence below) |
The problem it solves
Link to section “The problem it solves”Most organisations already “do SEO”; the problem is unmanaged work. The “before” column is a composite of common failure patterns, not a report about any company.
| Area | Without an operating model | With one |
|---|---|---|
| Requests | Arrive by chat, meeting and email; loudest wins | One intake; every item has an owner, a hypothesis and a size |
| Priorities | Whatever a tool’s audit flagged red | Scored by expected impact, confidence and effort, cut to capacity |
| Engineering work | Tickets languish; SEO learns of template changes after release | An agreed lane in the engineering plan and a release check owned with SEOps |
| Content | Volume targets; old pages decay unowned | Briefs from intent research, a refresh cycle, consolidation of overlaps |
| Reporting | Rank-tracker screenshots, total traffic | Non-brand clicks, conversions, tested changes, stated data gaps |
| Vendors | Agency holds the accounts; nobody reads its changes | You own accounts; read-only audits; change log; banned tactics written down |
The cost is real but hard to see. Google warns that hiring an SEO can “risk damage to your site and reputation” and that “you are responsible for the actions of any companies you hire”.[1] Changes can take hours or several months to show,[2] so an unmanaged programme learns slowly from noisy data and confuses activity with results.
What SEO Operations is not: naming, the SEOps split and boundaries
Link to section “What SEO Operations is not: naming, the SEOps split and boundaries”Is the term established? The practice is; the label is not. The US O*NET database lists “Search Marketing Strategists”, with SEO Consultant and SEO Strategist among reported job titles,[3] and Google publishes extensive guidance for site owners and for people who hire SEOs.[1] But “SEO operations” has no standard definition or standards body. Job titles using it mean different things: one agency’s “Head of SEO Operations” led the consulting team and owned work quality,[4] while a 2023 “SEO Operations Manager” posting described hands-on link building and keyword research.[5] Agencies also use “SEO ops” for maps of the tasks, tools and skills an enterprise SEO programme needs.[6] This page therefore classifies the label as an overlapping synonym for running SEO as a programme.
SEO Operations is also not:
- Technical SEO. This page gets a canonical fix into the engineering plan and judges its effect; diagnosing and implementing it is on SEOps.
- Paid search. Google says advertising “won’t have any effect on your site’s presence in our search results”.[1] Paid search campaigns are performance marketing (MarketingOps); AdOps covers ad serving and programmatic display.
- Gaming an algorithm. Google’s spam policies now include attempts to manipulate generative AI responses in Search.[7]
- A promise. “No one can guarantee a #1 ranking on Google.”[1]
Where it comes from and where it sits
Link to section “Where it comes from and where it sits”Origins and evolution
Link to section “Origins and evolution”No documented origin exists for “SEO operations”; it appears mostly in job titles and agency material (this Atlas’s reading of the evidence above). Milestones that shape how programmes run today:
- 2015: Google rebranded Webmaster Tools as Search Console, noting users who were marketers and SEO experts as well as webmasters.[8]
- October 2022: Google replaced its Webmaster Guidelines with Search Essentials;[9][1] their spam policies are the closest thing SEO has to a rulebook.
- November 2023: Google Analytics 4 removed first-click, linear, time-decay and position-based attribution.[10]
- 2024–2026: AI Overviews and AI Mode changed results pages;[11] on 2026-08-31 a generative AI report and an opt-out control reached all sites.[12][13]
Glossary and mental model
Link to section “Glossary and mental model”- Query, impression, click, CTR: what someone searched; a link to your site was shown (for most results, on the current results page, even if not scrolled into view); the person left Google for your page; clicks ÷ impressions.[14]
- Average position: the topmost position of your site (or page) in results, averaged over impressions; Google calls it “a complex metric that can be misleading”.[14]
- Anonymized queries: queries hidden from Search Console tables for privacy; they still count in chart totals.[15]
- Brand / non-brand: queries that do or do not name you; non-brand is the usual measure of demand SEO captured.
- Search intent: what the person wants. Google’s rater guidelines use Know (including Know Simple), Do, Website and Visit-in-person intents.[16]
- Cannibalisation: several of your pages competing for one intent.
- Content decay: a page losing clicks because it went stale or the results page changed.
- Core update: a broad change to Google’s ranking systems, made several times a year; broad core updates are announced on the ranking-updates list, smaller ones are not.[17]
- Manual action: a penalty applied after a human reviewer at Google finds pages that break spam policies.[18]
- E-E-A-T: experience, expertise, authoritativeness and trust; reflected by Google’s systems, not a ranking factor itself.[19][2]
- AEO / GEO: answer engine and generative engine optimisation; for its AI features Google calls this “still SEO”.[20]
A mental model: a portfolio of bets read through a fogged window
Link to section “A mental model: a portfolio of bets read through a fogged window”- A portfolio of bets. Every item (a refresh, a template fix, a new guide) is a bet with a payoff, a confidence and a cost. You cannot know which will pay, so you size bets, cap risky exposure and keep a flow of small, testable ones.
- A fogged window. Results arrive through data that is delayed, partial (anonymized queries, row limits, declined consent) and moved by forces you do not control (seasonality, core updates, AI features). Clean the window where you can; state where you cannot.
Failed programmes forget one picture: they bet without measuring, or watch dashboards without a portfolio.
How SEO Operations relates to other Ops
Link to section “How SEO Operations relates to other Ops”Diagram source (Mermaid)
flowchart TB SEOOPS["SEO Operations: intake, priorities, production, measurement, governance"] SEOPS["SEOps: crawl, index, render, CI checks"] CONTENT["ContentOps: content lifecycle"] WEB["WebOps: speed, Core Web Vitals, uptime"] MKT["MarketingOps: campaigns, leads, attribution"] ANALYTICS["AnalyticsOps: certified metrics"] ADS["Paid search and other advertising"] SEOOPS -->|"technical tickets"| SEOPS SEOPS -->|"index health, release checks"| SEOOPS SEOOPS -->|"briefs, refresh list"| CONTENT WEB -->|"Core Web Vitals reports"| SEOOPS SEOOPS -->|"organic leads and pipeline"| MKT ANALYTICS -->|"metric definitions"| SEOOPS ADS -.->|"no effect on organic ranking"| SEOOPS classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029 class SEOOPS core class SEOPS,CONTENT,WEB,MKT,ANALYTICS,ADS neutral
Text equivalent: SEO Operations, in the middle, swaps technical tickets for index health and release checks with SEOps, sends briefs to ContentOps, receives Core Web Vitals reports (WebOps) and metric definitions (AnalyticsOps), and passes organic leads to MarketingOps. A dotted line: advertising has no effect on organic ranking.
| Neighbour | Shared scope | Their focus | This page’s focus |
|---|---|---|---|
| SEOps | Search Console, spam policies, Core Web Vitals | Index coverage, crawl diagnostics, CI checks, staying compliant release by release | Performance reporting and its limits, governance, which technical work gets done |
| ContentOps | Briefs, refreshes, governance | Content models, workflow, reuse, localisation, retirement | Search inputs: intent, demand map, internal links, refresh priority |
| WebOps | Core Web Vitals | Measuring and fixing them (see its Core Web Vitals playbook) | Reporting them alongside search results |
| MarketingOps | Attribution, lead flow, search results pages | Campaigns including paid search, scoring, the funnel contract | Organic search as a source of demand |
| AnalyticsOps | Dashboards, metric definitions | Certifying metrics (see its certification playbook) | Search-specific metric rules |
| MarTechOps | Tags, consent mode | Stack and tag infrastructure | What consent loss does to organic numbers |
| AdOps | Pages that carry both content and display ads | Ad serving, programmatic supply chain | Organic only |
Core Web Vitals show the split: Google says good scores align “with what our core ranking systems seek to reward”;[21] WebOps fixes them, SEOps explains their search role, this page reports them beside search outcomes.
Principles and operating model
Link to section “Principles and operating model”Charter and principles
Link to section “Charter and principles”No official manifesto for SEO operations exists. The following charter is this Atlas’s proposal.
Mission. Grow the value the organisation gets from organic search, within search-engine policies, by running SEO as a measured portfolio of work the business can see and steer.
Non-goals. No promised rankings, no links bought to pass ranking credit, no pages made mainly for search engines, no numbers we cannot reproduce.
- People-first content, then SEO. Google says SEO “can be a helpful activity when it is applied to people-first content, rather than search engine-first content”.[19] Trade-off: you decline topics where you have nothing useful to say.
- Policy before priority. Items that conflict with spam policies are rejected before scoring, so a high score cannot smuggle them in.
- One backlog, real capacity. Commitments never exceed the days writers, SEOs and engineers actually have.
- Hypothesis, then evidence. Each item says what should change and how you will know.
- Own the accounts and the data. The organisation, not a vendor, owns Search Console, analytics and the change log.
- Report the fog. Every report states what data is missing and how big the gap is.
- Maintain what you publish. Each page has an owner and a review date.
Building blocks
Link to section “Building blocks”| Block | What it is | Why it matters |
|---|---|---|
| Search demand map | Topics and queries by intent, each mapped to one target page | Prevents cannibalisation and orphan topics |
| Page inventory | Indexable pages with owner, intent, last substantive update | Makes decay and ownership visible |
| Intake and backlog | One form, one scored list, explicit cut line | Turns requests into decisions |
| SOPs | Procedures for briefs, refreshes, merges, technical hand-off, reporting | Repeatable quality across people and vendors |
| Measurement policy | Metric definitions, the brand rule, segments, gaps, test rules | Ends arguments about whose number is right |
| Governance pack | Banned tactics, vendor rules, access register, AI content rule | Limits policy and legal risk |
Roles, ownership and RACI
Link to section “Roles, ownership and RACI”Titles vary; the jobs below exist in any working programme, even when one person holds several.
| Activity | SEO lead | Content lead | Engineering (with SEOps) | Analyst | Marketing leader |
|---|---|---|---|---|---|
| Intake and scoring | A/R | C | C | C | I |
| Demand map and briefs | A | R | I | C | I |
| Content refresh and consolidation | A | R | C (redirects) | C | I |
| Technical items (templates, canonicals) | A | I | R | I | I |
| Measurement policy and reports | A | I | I | R | C |
| Policy and vendor governance | R | C | C | I | A |
| Quarterly plan and budget | R | C | C | C | A |
R = responsible, A = accountable, C = consulted, I = informed. Key skills: intent analysis, editorial judgement, enough technical literacy to write a good ticket, basic statistics, and saying “not this cycle” with reasons.
Lifecycle of an SEO work item
Link to section “Lifecycle of an SEO work item”Every item moves through the same states: proposed, gated (policy and duplicate check), scored, committed or parked, in production, shipped (dated and annotated), measuring (a fixed window of several weeks, given Google’s advice on timing[2]) and closed with a verdict: worked, no detectable effect, or harmed. “No detectable effect” still calibrates future confidence scores.
Operating model and governance
Link to section “Operating model and governance”| Cadence | Who | Inputs | Outputs |
|---|---|---|---|
| Weekly triage (30 min) | SEO, content and engineering leads | New intake | Gated, scored items |
| Cycle planning (2–4 weeks) | Same plus analyst | Backlog, capacity | Committed list, cut line |
| Monthly review | SEO lead, analyst, marketing leader | Measurement pack | Verdicts, decay list, risks |
| Quarterly planning | Leadership | Results, budget | Themes, capacity split, vendors |
| Event-driven | SEO lead, SEOps | Traffic alert, core update, manual action | Runbook |
Escalation: policy questions go to the accountable marketing leader (and legal where law applies); a release that may harm search goes to its engineering owner through the gate defined with SEOps and ReleaseOps.
Architecture and workflow
Link to section “Architecture and workflow”Reference architecture: the programme as a system
Link to section “Reference architecture: the programme as a system”For a business function the architecture is a process: where work comes from, the gates it passes, its production lanes, and the loop that feeds results back.
Diagram source (Mermaid)
flowchart TB
IN["Signals: demand research, Search Console, requests, audits"]
INTAKE["One intake form"]
GATE{"Policy and duplicate gate"}
REJ["Rejected with reason"]
SCORE["Score and cut to capacity"]
C["Content lane: briefs, refresh, merge"]
T["Technical lane: engineering tickets"]
L["Earned links and digital PR"]
SHIP["Ship with date and annotation"]
MEAS["Measure against control"]
REV["Monthly review: verdicts"]
IN --> INTAKE --> GATE
GATE -->|"fails"| REJ
GATE -->|"passes"| SCORE
SCORE --> C
SCORE --> T
SCORE --> L
C --> SHIP
T --> SHIP
L --> SHIP
SHIP --> MEAS --> REV
REV -.->|"calibrate scores, update demand map"| IN
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class INTAKE,SCORE,SHIP,MEAS,REV core
class GATE decision
class REJ risk
class IN,C,T,L neutral
Text equivalent: Signals (demand research, Search Console, requests, audits) feed one intake form. A policy and duplicate gate rejects an item with a reason or passes it to scoring and the capacity cut. Work goes to the content, technical or earned-links lane, ships with a date, is measured against a control and judged at the monthly review, which feeds calibrated scores and an updated demand map back into the signals.
Three design choices carry most of the weight:
- The gate comes before the score. Otherwise an attractive estimate (“500 city pages”) pushes people into tactics the spam policies name.[7]
- The technical lane is a contract. Engineering agrees a standing share of capacity and SEOps defines release checks; without it, the backlog fills with tickets nobody builds.
- Earned links are a lane, bought links are not. Paid placements are fine only when qualified with
rel="sponsored"orrel="nofollow"; links that pass ranking credit for money are link spam.[7]
End-to-end workflow: a content refresh from signal to verdict
Link to section “End-to-end workflow: a content refresh from signal to verdict”Diagram source (Mermaid)
sequenceDiagram participant AN as Analyst participant SEO as SEO lead participant CL as Content lead participant EN as Engineering AN->>SEO: Decay alert: guide lost 35% clicks Note over SEO: Check dates, seasonality, cannibalisation SEO->>CL: Brief: intent, gaps, merge two pages CL->>SEO: Draft for search review SEO->>CL: Approved, with redirect map CL->>EN: Publish merge, redirect old URL EN->>CL: Redirect live, release noted CL->>SEO: Shipped, with date SEO->>AN: Annotate, start 6-week window AN->>SEO: Verdict versus control pages
Text equivalent: The analyst flags a guide that lost 35% of its clicks. The SEO lead checks dates, seasonality and cannibalisation, briefs the content lead, reviews the draft and approves it with a redirect map. The content lead has engineering publish the merge and redirect; engineering confirms. The SEO lead annotates the ship date and starts a six-week window; the analyst returns a verdict against control pages.
Happy path. The merge and redirect ship in one cycle and six weeks later the page beats its control group.
Exception paths. Seasonal: sixteen months of data show the same dip last year;[22] close the alert. Core update rolling out: wait at least a full week after it completes;[17] re-check. Redirect cannot ship: hold the merge too. No detectable effect: record it and lower confidence for similar refreshes.
Practices, frameworks and tools
Link to section “Practices, frameworks and tools”Core practices and playbooks
Link to section “Core practices and playbooks”Playbook: intake and triage
Link to section “Playbook: intake and triage”- Every request uses the intake form; chat requests get a link to it.
- Gate within a week: spam policy conflict, duplicate page or queued item, legal or brand review. Rejections get a reason.
- Score passing items (see prioritisation).
- Cut to capacity at planning; parked items are re-scored when data changes.
- Accept only items with an owner, ship date, hypothesis and measurement window.
Playbook: keyword research and search intent as a production input
Link to section “Playbook: keyword research and search intent as a production input”Keyword research feeds the demand map; it is not a deliverable in itself.
- Collect queries from your Search Console data, from customer language in sales and support, and from keyword tools.
- Treat volumes as rough: Keyword Planner shows estimates averaged over 12 months by default, including close variants;[23] Google Trends is a sample normalised to 0–100, with noise added and low-volume terms shown as zero.[24] Rank options with them, and do not turn them into point forecasts: if leaders need a forecast, give a range with stated assumptions and compare it with the verdicts each quarter.
- Classify intent (Know, Do, Website, Visit-in-person)[16] from the current results page, not just the words.
- Map each intent cluster to one page; two pages for one intent is a merge candidate.
- Write down why you can serve the intent better than current results. If you cannot, do not write the page.
Playbook: briefs, optimisation and internal linking
Link to section “Playbook: briefs, optimisation and internal linking”A brief states the reader, intent, questions to answer, evidence and first-hand experience to show, and the pages that should link to it. Google’s “Who, How, and Why” questions (who made it, how, including automation, and why) make a good checklist.[19] On internal links, Google’s rule of thumb is: “Every page you care about should have a link from at least one other page on your site.”[25] Review against the brief, not a keyword-density score: Google has no preferred word count and ignores the meta keywords tag.[2][19]
Playbook: refresh, consolidate or prune
Link to section “Playbook: refresh, consolidate or prune”| Signal | Likely action | Check first |
|---|---|---|
| Clicks falling, content outdated | Refresh substantially | Seasonality; a core update in progress |
| Two pages ranking for one intent | Consolidate into one, redirect the other | Which page has the links and conversions |
| Page cannot meet any real need | Prune or exclude from Search | Whether it serves users who arrive directly |
| Impressions steady, clicks falling | Rewrite title and snippet | AI features or rich results on the results page |
Google calls deleting content “a last resort”; wanting to delete whole sections suggests they were made for search engines first.[17]
Playbook: handing technical work to engineering
Link to section “Playbook: handing technical work to engineering”Write tickets as engineers want them: template or URL pattern, evidence, expected behaviour, acceptance test, risk. SEOps owns diagnosis and release checks; this page owns getting the work into the plan. Agree in advance which search signals can block a release (ReleaseOps), not on launch day.
Playbook: capacity planning
Link to section “Playbook: capacity planning”Count person-days per lane after meetings, maintenance and support. Two Atlas heuristics, not benchmarks: reserve a fixed share of content capacity for refreshes before planning new pages, because every page creates maintenance work; and if completed days fall below about 80% of committed days for three cycles, you are planning against imaginary capacity.
Methods, standards and frameworks
Link to section “Methods, standards and frameworks”There is no standard for running an SEO programme. What exists:
| Kind | Example | Status |
|---|---|---|
| Search-engine rules | Google Search Essentials and spam policies[7] | Mandatory to appear in Google; enforced by demotion or manual action |
| Search-engine guidance | Helpful content, SEO Starter Guide, generative AI guidance[19][2][20] | Recommendations from the engine itself |
| Rater guidelines | Search Quality Evaluator Guidelines[16] | Evaluate Google’s systems; ratings do not directly change rankings[26] |
| Prioritisation | RICE: “total impact per time worked”[27] | Product method, adapted here |
| Experimentation | Page-bucket tests;[28] CausalImpact[29] | Established statistics; tools differ |
| Law | Consumer rules on fake reviews (for example the US FTC rule[30]) | Mandatory in their jurisdiction |
Prioritisation in practice. RICE uses impact steps of 3, 2, 1, 0.5 and 0.25 and confidence of 100%, 80% or 50%.[27] Artefact 2 adapts each field to SEO. The score ranks; it does not forecast (Lab 1).
Tooling landscape
Link to section “Tooling landscape”Named tools are examples, not endorsements. Google says third-party tools “don’t have access to our internal ranking data” and that it does not evaluate them.[31]
| Category | Job | Examples | Selection criteria and risks |
|---|---|---|---|
| First-party search data | Clicks, impressions, index status | Google Search Console; Bing Webmaster Tools | Row limits, anonymization |
| Web analytics | Organic sessions and conversions | Google Analytics 4 or similar | Consent loss, attribution model |
| Demand research | Query ideas, relative volume | Keyword Planner, Google Trends, keyword tools | Estimates differ; ranges, not point forecasts |
| Crawlers and auditors | Broken links, orphan pages, missing tags | Desktop or cloud crawlers | Red flags are not priorities |
| Rank tracking | Positions for a fixed query set | Commercial trackers | Results vary by time, place and device;[32] trends only |
| Workflow | Intake, backlog, briefs | Issue trackers, shared docs | Link items to ship dates and outcomes |
| Warehouse and BI | Long history, joins, segments | BigQuery bulk export, BI tools | Bulk export excludes anonymized queries[33] |
Automation and AI
Link to section “Automation and AI”Automate data work (API pulls, decay alerts, orphan-page checks, report assembly); keep judgement human.
Generative AI fits inside the policy. Google says AI can help with research and structure, but generating many pages without added value may violate the scaled content abuse policy, and all AI-generated content, including titles, meta descriptions, structured data and alt text, should be fact-checked by a person.[26] Scaled content abuse applies “no matter how it’s created”.[7] A workable rule: AI drafts and suggests; a named human approves and owns every published page.
On AI search features, Google says (as of October 2026) there are no extra requirements, no special files or schema, and that llms.txt files neither help nor harm in Google Search.[11][20]
Measuring SEO honestly
Link to section “Measuring SEO honestly”What Search Console data can and cannot tell you
Link to section “What Search Console data can and cannot tell you”Search Console’s documented limits:
- Anonymized queries. Queries not issued by “more than a few dozen users over a two-to-three month period” are hidden from tables but counted in chart totals. When you filter by query, they disappear, so “contains brand” plus “does not contain brand” adds up to less than the total.[15]
- Row limits. The interface table and export show up to 1,000 rows; the API returns up to 25,000 rows per request and, per Google’s 2022 explanation, up to 50,000 rows per day per site per search type.[15][34] The BigQuery bulk export gives all available rows except anonymized queries.[33]
- Aggregation. By property, several results from your site for one query count as one impression at the topmost position; by page, each URL counts separately. CTR and position are “generally higher when aggregating by property”.[35]
- Average position: a knowledge panel at position 6 can be more prominent than a link at 3, so watch changes, not absolutes.[14]
- Time. Data usually arrives in two to three days; days are labelled in Pacific Time; the newest data can be preliminary.[36][35] Search Console keeps 16 months, so store your own history if you need longer.[37][22]
- AI features. AI Overviews and AI Mode count in the Web search type; an AI Overview occupies one position shared by its links, and an AI Mode follow-up is a new query.[11][14] The generative AI performance report (all sites since 2026-08-31) shows impressions by page, country, device and date; its help page describes no clicks metric.[12]
- Other engines. Search Console covers Google only. Bing Webmaster Tools reports Bing clicks, impressions and CTR;[38] its AI Performance report (public preview since February 2026) counts citations in Copilot and Bing’s AI summaries.[39] An Atlas rule for multi-market programmes: report each engine that matters, regional ones included, from its own data, side by side, not summed.
Joining search data to business outcomes
Link to section “Joining search data to business outcomes”Search Console stops at the click; outcomes live in analytics and CRM systems, which see a different slice of reality.
Diagram source (Mermaid)
flowchart TB Q["Searches for your topics"] IMP["Impressions"] CLK["Clicks to your site"] SES["Organic sessions in analytics"] CONV["Conversions"] REV["Pipeline or revenue"] L1["Leak: anonymized queries, row limits"] L2["Leak: AI answers, rich results, zero-click"] L3["Leak: declined consent, blocked scripts"] L4["Leak: attribution model choices"] Q --> IMP --> CLK --> SES --> CONV --> REV IMP -.-> L1 CLK -.-> L2 SES -.-> L3 CONV -.-> L4 classDef core fill:#e8f3f2,stroke:#16756f,color:#122029 classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029 class Q,IMP,CLK,SES,CONV,REV core class L1,L2,L3,L4 risk
Text equivalent: Searches lead to impressions, clicks, sessions, conversions and revenue. Data leaks at impressions (anonymized queries, row limits), clicks (AI answers, rich results), sessions (declined consent) and conversions (attribution choices).
Practical rules:
- Right number, right question. Search Console for visibility and clicks; analytics for behaviour and conversions. Google cites privacy, processing, time lag, time zones and JavaScript-only tracking as reasons they differ.[36]
- Know your channel definition. GA4’s default “Organic Search” channel includes visits from AI Overviews and AI Mode, while visits from assistants such as ChatGPT, Gemini or Copilot fall in a separate “AI Assistant” channel; the default channel group cannot be edited (as of October 2026).[40] Report assistant referrals next to organic search, not inside it.
- Know your consent gap. Analytics misses users who decline cookies; modelling fills it only above documented thresholds (for example, 1,000 events a day with analytics storage denied for 7 days).[41]
- Know your attribution model. GA4 offers data-driven and last-click models; an allocation rule is not proof of cause[10] (see MarketingOps on attribution).
- Segment brand from non-brand, and report the share that could not be segmented, as Lab 2 shows.
Proving a change worked
Link to section “Proving a change worked”A before/after chart of one page is common and weak evidence: seasonality, core updates, competitors and AI features move the same line.
Compare groups of similar pages instead: change one, leave a control alone. User-level A/B tests do not work for SEO because
a crawler is effectively one visitor, so specialist tools split pages into similar buckets and forecast what the changed group
would have done without the change.[28] The idea comes from counterfactual methods such as CausalImpact, a Bayesian
structural time-series model.[29] Lab 3 shows a simple
version. Variants on separate URLs follow Google’s testing rules: no cloaking, rel="canonical" to the original, 302 not 301,
and end promptly.[42]
AI features and zero-click searches
Link to section “AI features and zero-click searches”Expect fewer clicks per impression on some queries. In a Pew Research Center analysis of the browsing of 900 US adults in March 2025, users clicked a traditional result in 8% of visits to results pages with an AI summary versus 15% without one, and clicked a link inside the summary in 1% of visits.[43] Google said the study used “a flawed methodology and skewed queryset that is not representative of Search traffic” and that it had not seen significant drops in aggregate web traffic;[44] Google also says clicks from results pages with AI Overviews are “higher quality”.[11] Both are claims about averages; your site’s effect depends on your queries: track CTR by intent group, watch the generative AI report, and value clicks by conversion.
Since 2026-08-31 owners can exclude a site from AI Overviews, AI Mode and Discover’s generative AI features in Search Console. That removes links and grounding there; Google says it is not a ranking signal elsewhere and does not affect AI training, which Google-Extended governs.[13] It is a business decision with a measurable cost, not a technical toggle.
SEO Operations in practice
Link to section “SEO Operations in practice”Reference implementation: operating artefacts
Link to section “Reference implementation: operating artefacts”A minimal working set for a team of three to ten people. Adapt the fields; keep the gates.
Artefact 1: the intake form
Link to section “Artefact 1: the intake form”Example status: YAML syntax-checked by the validator; field names are this page’s proposal.
# seo-intake.yaml - one file (or form submission) per request
id: SEO-2026-118
requested_by: product-marketing
date: 2026-10-20
title: Refresh "CRM pipeline stages" guide and merge the duplicate article
lane: content # content | technical | links | reporting
target_pages:
- https://www.example.com/guides/sales-pipeline-stages
- https://www.example.com/blog/pipeline-stages-explained # merge, then redirect
intent: Know # Know | Do | Website | Visit-in-person
hypothesis: >
One stronger page for the intent will recover the 35% click loss since June
without losing the conversions the blog post currently drives.
evidence:
- Search Console pages report, last 3 months vs previous period
- both URLs receive impressions for the same top 20 queries
policy_check:
spam_policies_reviewed: true
paid_or_exchanged_links: false
ai_generated_drafting: assisted # none | assisted | generated
legal_review_needed: false
estimates:
reach_monthly_impressions: 42000
impact: 2 # 0.25, 0.5, 1, 2, 3
confidence: 0.8 # 0.5, 0.8, 1.0
effort_days: {content: 3, seo: 1, engineering: 0.5}
measurement:
metric: non-brand clicks to the surviving URL
control: 20 guides in the same section, untouched this cycle
window_weeks: 6
owner: content-lead
Artefact 2: the scoring rubric
Link to section “Artefact 2: the scoring rubric”| Field | How to estimate | Guardrail |
|---|---|---|
| Reach | Monthly impressions of affected pages (Search Console), or estimated searches for new pages | New-page estimates come from ranges in tools; mark them low confidence |
| Impact | 3 = transforms the page’s usefulness; 1 = clear improvement; 0.25 = cosmetic | No impact score above 1 without a stated reason |
| Confidence | 1.0 = tested on similar pages; 0.8 = documented by Google or strong evidence; 0.5 = hunch | Hunches can be tested cheaply first |
| Effort | Person-days across all lanes, including review and redirects | Engineering days count even if “small” |
| Gate (before scoring) | Spam policies, duplicates, legal and brand review | A failed gate is a rejection, not a low score |
Artefact 3: the weekly non-brand query pull
Link to section “Artefact 3: the weekly non-brand query pull”Example status: JSON syntax-checked; fields checked against the Search Analytics API reference (updated 2026-08-11);
not sent (needs a verified property and OAuth with the webmasters.readonly scope).[34]
{
"startDate": "2026-10-12",
"endDate": "2026-10-18",
"dimensions": ["query", "page"],
"type": "web",
"dimensionFilterGroups": [
{
"groupType": "and",
"filters": [
{
"dimension": "query",
"operator": "excludingRegex",
"expression": "(?i)\\bacme(crm)?\\b"
},
{"dimension": "country", "operator": "equals", "expression": "gbr"}
]
}
],
"aggregationType": "auto",
"rowLimit": 25000,
"startRow": 0,
"dataState": "final"
}
POST it to the property’s searchAnalytics/query method (a Domain property’s site URL is sc-domain:example.com). The
brand rule is the one stored in the measurement policy and reused in Lab 2: RE2 is case-sensitive unless the expression
starts with (?i),[45] and \b stops “acme” matching inside other words. The query filter drops anonymized queries, so the
result is a lower bound; pull the unfiltered total too, so reports can show the gap.[15]
Artefact 4: the vendor and access policy
Link to section “Artefact 4: the vendor and access policy”SEO VENDOR AND ACCESS POLICY (one page)
1. Ownership: our organisation owns Search Console, analytics, tag manager and
the domain. Vendors get named user accounts, never shared logins.
2. Audits: prospective vendors get a Search Console restricted user (view
only), never owner, until a contract is signed.
3. Changes: every change a vendor makes is logged (date, URL or template, why)
and reviewed by our SEO lead before release.
4. Tag manager: vendors get Edit or Approve rights, never Publish; our owner
reviews and publishes every container version.
5. Banned: guaranteed rankings; links that pass ranking credit in exchange for
money, goods or services; link exchanges of any size (house rule); private
blog networks; doorway or scaled pages without user value; fake or
incentivised reviews.
6. Required: vendors cite official search-engine documentation or their own test
data for recommendations, and label AI-drafted content.
7. Offboarding: remove the vendor's accounts and verification tokens within one
working day of contract end; review the change log.
Sources for each line: Google advises read-only Search Console access for audits and says you should never have to link to an SEO;[1] a former verified owner can regain access until their token is removed;[46] in Tag Manager, Edit and Approve cannot publish, and only Publish pushes changes live;[47] buying or selling links for ranking purposes is link spam, and Google names “excessive” link exchanges, so banning all exchanges is stricter than Google;[7] the US FTC’s Consumer Reviews and Testimonials Rule (in effect since 2024-10-21) covers buying and selling fake reviews, and courts can impose civil penalties for knowing violations.[30] Other jurisdictions differ; ask counsel.
Hands-on labs
Link to section “Hands-on labs”Three labs on synthetic data, Python 3.8+ standard library only: no accounts, cost or personal data. Each was run on 2026-10-23 exactly as printed (Python 3.8.10, Ubuntu Linux); expected outputs are copied from those runs.
Lab 1 (beginner): score and cut a backlog to capacity
Link to section “Lab 1 (beginner): score and cut a backlog to capacity”Objective. Apply policy gates before scoring, rank with a RICE-style score, and commit only what capacity allows. Prerequisites. Python 3.8+. Time. 20 minutes. Risk. None.
- Create
~/seo-ops-labs/lab1and save this asbacklog.csv:
id,title,lane,reach,impact,confidence,effort_days,notes
S-101,Refresh pricing guide (stale 2024 figures),content,42000,2,0.8,3,
S-102,Merge three overlapping onboarding articles,content,18000,1,0.8,4,
S-103,Fix internal links to orphaned integration pages,seo,9000,1,1.0,1,
S-104,Template: add product FAQ section to category pages,eng,120000,0.5,0.5,6,
S-105,Buy 40 guest-post links from vendor list,links,60000,2,0.5,2,paid links
S-106,New comparison page for top competitor query,content,15000,2,0.5,5,
S-107,Rewrite title tags on 25 low-CTR pages,seo,80000,0.5,0.8,2,
S-108,Fix canonical tags on faceted category URLs,eng,95000,1,0.8,4,
S-109,Generate 500 city landing pages with AI,content,200000,1,0.5,3,scaled ai pages
S-110,Annual refresh of top 10 how-to guides,content,30000,1,0.8,6,
- Save the script as
triage.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Score an SEO backlog, apply policy gates, and cut it to team capacity."""
import csv
import sys
CAPACITY = {"content": 10, "seo": 4, "eng": 5} # person-days available this cycle
BLOCKED = {
"paid links": "link spam policy (paid links must not pass ranking credit)",
"scaled ai pages": "scaled content abuse: near-identical pages, no user value",
}
def load(path):
with open(path, newline="") as f:
return list(csv.DictReader(f))
def main(path):
items, rejected = [], []
for row in load(path):
reason = BLOCKED.get(row["notes"].strip())
if reason:
rejected.append((row["id"], reason))
continue
reach, impact = float(row["reach"]), float(row["impact"])
conf, effort = float(row["confidence"]), float(row["effort_days"])
row["score"] = reach * impact * conf / effort
items.append(row)
items.sort(key=lambda r: r["score"], reverse=True)
left = dict(CAPACITY)
print(f"{'id':6} {'lane':8} {'score':>8} {'days':>4} decision")
for r in items:
lane, days = r["lane"], float(r["effort_days"])
if lane not in left:
decision = "no capacity defined for lane"
elif days <= left[lane]:
left[lane] -= days
decision = "COMMIT"
else:
decision = f"next cycle ({lane}: {left[lane]:g} day(s) left)"
print(f"{r['id']:6} {lane:8} {r['score']:8.0f} {days:4g} {decision}")
for rid, reason in rejected:
print(f"{rid:6} rejected before scoring: {reason}")
print("unused days:", ", ".join(f"{k}={v:g}" for k, v in left.items()))
if __name__ == "__main__":
main(sys.argv[1] if len(sys.argv) > 1 else "backlog.csv")
- Run
python3 triage.py backlog.csv.
Expected output:
id lane score days decision
S-101 content 22400 3 COMMIT
S-108 eng 19000 4 COMMIT
S-107 seo 16000 2 COMMIT
S-103 seo 9000 1 COMMIT
S-104 eng 5000 6 next cycle (eng: 1 day(s) left)
S-110 content 4000 6 COMMIT
S-102 content 3600 4 next cycle (content: 1 day(s) left)
S-106 content 3000 5 next cycle (content: 1 day(s) left)
S-105 rejected before scoring: link spam policy (paid links must not pass ranking credit)
S-109 rejected before scoring: scaled content abuse: near-identical pages, no user value
unused days: content=1, seo=1, eng=1
Validation. The two highest-reach items (S-109, S-105) never reach scoring: the gate decides. S-109 is rejected for being
500 near-identical pages, not for using AI. S-104 waits because
engineering has one day left. Troubleshooting. KeyError: 'notes' means a missing column; ValueError means a stray space
or thousands separator. Extension. Set CAPACITY["eng"] = 0: every technical item waits forever. Teardown.
rm -r ~/seo-ops-labs/lab1.
Lab 2 (intermediate): read a Search Console export without fooling yourself
Link to section “Lab 2 (intermediate): read a Search Console export without fooling yourself”Objective. Split brand from non-brand, measure how much of the total the rows do not explain, and compute an impression-weighted position. Prerequisites. Lab 1’s setup. Time. 25 minutes. Risk. None.
- In
~/seo-ops-labs/lab2, save the query rows asqueries.csvand the chart totals astotals.json:
query,clicks,impressions,position
acme crm,4200,9800,1.1
acme crm login,3100,5200,1.0
acme pricing,900,2600,1.4
crm for small business,610,41000,7.9
best crm software,240,52000,11.6
crm pipeline template,520,8800,4.2
what is a crm,380,30500,6.8
crm vs spreadsheet,150,4100,5.5
acme vs examplesoft,300,1900,2.3
sales pipeline stages,410,12600,5.1
{"clicks": 12600, "impressions": 236000}
- Save the script as
read_export.py.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Read a Search Console query export honestly: brand split, missing rows, position."""
import csv
import json
import re
import sys
BRAND = re.compile(r"\bacme(crm)?\b", re.IGNORECASE) # same rule as the API pull
def main(rows_path, totals_path):
with open(rows_path, newline="") as f:
rows = list(csv.DictReader(f))
with open(totals_path) as f:
totals = json.load(f)
seg = {"brand": [0, 0, 0.0], "non-brand": [0, 0, 0.0]}
for r in rows:
key = "brand" if BRAND.search(r["query"]) else "non-brand"
clicks, impr = int(r["clicks"]), int(r["impressions"])
seg[key][0] += clicks
seg[key][1] += impr
seg[key][2] += float(r["position"]) * impr
row_clicks = sum(s[0] for s in seg.values())
row_impr = sum(s[1] for s in seg.values())
for name, (clicks, impr, pos_x_impr) in seg.items():
print(f"{name:9} clicks={clicks:6} impressions={impr:7} "
f"ctr={clicks / impr:6.2%} weighted_position={pos_x_impr / impr:5.1f}")
gap_clicks = totals["clicks"] - row_clicks
gap_impr = totals["impressions"] - row_impr
print(f"rows sum clicks={row_clicks:6} impressions={row_impr:7}")
t_clicks, t_impr = totals["clicks"], totals["impressions"]
print(f"chart total clicks={t_clicks:6} impressions={t_impr:7}")
print(f"not in rows: {gap_clicks} clicks ({gap_clicks / totals['clicks']:.1%}), "
f"{gap_impr} impressions ({gap_impr / totals['impressions']:.1%})")
naive = sum(float(r["position"]) for r in rows) / len(rows)
print(f"unweighted mean of row positions={naive:.1f} (do not report this)")
share = seg["non-brand"][0] / row_clicks
print(f"non-brand share of itemised clicks={share:.1%}")
if __name__ == "__main__":
main(*(sys.argv[1:] or ["queries.csv", "totals.json"]))
- Run
python3 read_export.py queries.csv totals.json.
Expected output:
brand clicks= 8500 impressions= 19500 ctr=43.59% weighted_position= 1.2
non-brand clicks= 2310 impressions= 149000 ctr= 1.55% weighted_position= 8.4
rows sum clicks= 10810 impressions= 168500
chart total clicks= 12600 impressions= 236000
not in rows: 1790 clicks (14.2%), 67500 impressions (28.6%)
unweighted mean of row positions=4.7 (do not report this)
non-brand share of itemised clicks=21.4%
Validation. Brand gives 8,500 of 10,810 itemised clicks, so a sitewide total mostly measures brand demand. 14.2% of
clicks are in no row, so the non-brand share is of itemised clicks. The unweighted mean position (4.7) flatters; weighting by
impressions approximates Search Console’s average (8.4 for non-brand).[14]
Troubleshooting. If “acme vs examplesoft” is a competitor query, add a segment and write the rule into the measurement
policy. Extension. Run it on your own export (confidential business data). Teardown. rm -r ~/seo-ops-labs/lab2.
Lab 3 (advanced): measure a change with a control group
Link to section “Lab 3 (advanced): measure a change with a control group”Objective. See how a before/after comparison misleads; estimate the effect against a control group with a placebo check. Prerequisites. Lab 1’s setup. Time. 30 minutes. Risk. None.
- In
~/seo-ops-labs/lab3, save this generator asmake_data.py: 56 days of clicks for a changed and a control page group, with a weekday pattern, falling demand and a true +8% effect from day 28.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Generate 56 days of synthetic daily clicks for a test and a control page group."""
import csv
import math
with open("daily.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["day", "period", "control_clicks", "test_clicks"])
for day in range(56):
weekly = 1 + 0.15 * math.sin(2 * math.pi * day / 7) # weekday pattern
season = 1 - 0.004 * day # demand slowly falling
noise_c = 1 + 0.03 * math.sin(day * 12.9898) # deterministic noise
noise_t = 1 + 0.03 * math.sin(day * 78.233)
lift = 1.08 if day >= 28 else 1.0 # true effect: +8%
control = round(1000 * weekly * season * noise_c)
test = round(950 * weekly * season * noise_t * lift)
w.writerow([day, "pre" if day < 28 else "post", control, test])
- Save the analysis as
measure.py, then runpython3 make_data.py && python3 measure.py daily.csv.
Example status: verified by execution on 2026-10-23 (Python 3.8.10, standard library).
"""Compare a naive before/after with a control-adjusted estimate of a page change."""
import csv
import sys
def total(rows, period, column, days=None):
picked = [r for r in rows if r["period"] == period]
if days is not None:
picked = [r for r in picked if int(r["day"]) in days]
return sum(int(r[column]) for r in picked)
def main(path):
with open(path, newline="") as f:
rows = list(csv.DictReader(f))
t_pre, t_post = total(rows, "pre", "test_clicks"), total(rows, "post", "test_clicks")
c_pre = total(rows, "pre", "control_clicks")
c_post = total(rows, "post", "control_clicks")
naive = t_post / t_pre - 1
adjusted = (t_post / t_pre) / (c_post / c_pre) - 1
print(f"test pages pre={t_pre} post={t_post} naive change={naive:+.1%}")
print(f"control pages pre={c_pre} post={c_post} change={c_post / c_pre - 1:+.1%}")
print(f"control-adjusted effect on test pages={adjusted:+.1%}")
# Placebo check: pretend the change happened halfway through the pre-period.
a, b = set(range(0, 14)), set(range(14, 28))
test_ratio = (total(rows, "pre", "test_clicks", b)
/ total(rows, "pre", "test_clicks", a))
ctrl_ratio = (total(rows, "pre", "control_clicks", b)
/ total(rows, "pre", "control_clicks", a))
print(f"placebo effect inside the pre-period={test_ratio / ctrl_ratio - 1:+.1%}"
" (should be near 0)")
if __name__ == "__main__":
main(sys.argv[1] if len(sys.argv) > 1 else "daily.csv")
Expected output:
test pages pre=25191 post=23958 naive change=-4.9%
control pages pre=26538 post=23413 change=-11.8%
control-adjusted effect on test pages=+7.8%
placebo effect inside the pre-period=+0.2% (should be near 0)
Validation. The naive comparison says the change lost 4.9%; against the control it gained +7.8%, close to the true +8%.
The near-zero placebo shows the groups moved together beforehand. Troubleshooting. A large placebo means the groups are not
comparable; rebuild them by traffic, template and seasonality. Limits. One ratio has no uncertainty interval; for big
decisions use more pages and a method with intervals.[29] Extension. Set lift to 1.0: the adjusted effect
falls to about zero (−0.2%). Teardown. rm -r ~/seo-ops-labs.
Use cases and scenarios
Link to section “Use cases and scenarios”All four are illustrative scenarios, not reports about real organisations.
| Scenario | Context | Operating approach | Trade-off | Success measure |
|---|---|---|---|---|
| B2B software, content-led | 400 guides, half stale; writers measured on new posts | Decay list; refresh capacity; merges; briefs | Fewer new posts | Non-brand clicks and sign-ups versus control |
| Retailer, template-led | 80,000 URLs; gains need engineering | Engineering lane; acceptance tests; SEOps release checks; page-bucket tests | SEO waits for release trains | Tested lift per template change |
| Multi-market publisher with an agency | Agency runs six countries, holds the accounts | Vendor policy, ownership transfer, shared change log | Short-term friction | No shared logins; every change logged |
| Local services firm | Ten pages, one marketer | Google says a small local business can do much itself;[1] a quarterly checklist | Risk of neglect | Enquiries from search tracked |
Measure, govern, pay
Link to section “Measure, govern, pay”Metrics and KPIs
Link to section “Metrics and KPIs”| KPI | Definition / formula | Source | Pitfall | Cadence |
|---|---|---|---|---|
| Non-brand clicks | Clicks from queries not matching the brand rule | Search Console API | Excludes anonymized queries: a lower bound | Weekly |
| Unsegmented share | (Chart total clicks − sum of itemised clicks) ÷ chart total | Search Console | Rising share hides changes | Monthly |
| Organic conversions | Key events in the Organic Search channel | Analytics | Consent loss; model choice | Monthly |
| AI-assistant referrals | Sessions and conversions in GA4’s AI Assistant channel | Analytics | Not organic search; reported separately | Monthly |
| Value per organic click | Organic conversion value ÷ Search Console clicks | Both | Mixes two sources; trend only | Quarterly |
| Commitment completion | Items shipped ÷ items committed per cycle | Backlog | Gaming by committing small items | Per cycle |
| Verdict rate | Closed items with a measured verdict ÷ items shipped | Backlog | “No effect” is still a verdict | Monthly |
| Decay backlog | Pages flagged for refresh and not yet handled | Inventory | Grows silently | Monthly |
| Policy incidents | Manual actions, rejected vendor tactics, AI content defects | Search Console, logs | Zero is the target, not a quota | Monthly |
Worked calculation (illustrative). From Lab 2: unsegmented share = (12,600 − 10,810) ÷ 12,600 = 14.2%. The honest statement is “non-brand clicks were at least 2,310 (21.4% of itemised clicks); 14.2% could not be segmented”. If analytics records organic sign-ups worth 9,200 that week, value per organic click = 9,200 ÷ 12,600 ≈ 0.73; track its trend, not its level, because the systems count differently.[36]
Vanity traps. Rank screenshots (results vary by time, place and device[32]), total impressions, third-party “visibility scores” (no access to Google’s data[31]), pages published.
Quality, policy and compliance
Link to section “Quality, policy and compliance”- Search policy: link spam, scaled content abuse, doorways and cloaking can demote or remove pages.[7] In the version updated 2026-08-28, the site reputation policy works differently inside the European Economic Area: affected pages “may be categorized as separate from the main domain” instead of receiving a manual action.[7]
- Consumer law covers fake reviews and testimonials; the US FTC rule is one example.[30] This page is not legal advice.
- AI content: human fact-check before publishing; consider telling readers how automation was used.[26]
- YMYL topics (health, finance, safety) get extra review; Google gives strong E-E-A-T more weight there.[19]
- Access: few named owners; vendors are users; leavers’ tokens removed.[46] Tag manager is the larger exposure: a Publish right pushes container changes, including scripts, live on every page that loads the container, a security and privacy risk far beyond search, so keep Publish in-house.[47]
Cost, capacity and sustainability
Link to section “Cost, capacity and sustainability”Costs are people, tools and vendors. Two unit measures help: cost per shipped item (cycle cost ÷ items shipped) and cost per measured gain (cost of tested items ÷ conversions gained versus control). The hidden cost is maintenance: content made to chase volume becomes a liability you may later have to prune.[17] Sustainability mostly means not publishing pages nobody needs; hosting impacts belong to WebOps and GreenOps.
Assurance of the operating model
Link to section “Assurance of the operating model”Each quarter, run the governance checklist, reconcile report totals with Search Console, match the vendor change log to releases and re-read the spam policies (last updated 2026-08-28 when checked).[7]
When things go wrong
Link to section “When things go wrong”Common failures and troubleshooting
Link to section “Common failures and troubleshooting”| Symptom | Likely cause | Diagnosis | Remediation | Prevention |
|---|---|---|---|---|
| Report totals disagree with Search Console | Filters drop anonymized queries; different aggregation | Compare unfiltered chart total; check aggregation type[35] | Show both numbers and the gap | Measurement policy |
| Clicks fall, impressions stable | Titles/snippets, rich results, AI features | Query-level CTR by intent[22] | Rewrite titles; test | CTR watch on top queries |
| Backlog grows, nothing technical ships | No engineering lane | Committed vs shipped by lane | Agree capacity with engineering | Lane in the plan |
| Sudden sitewide drop | Technical error, manual action, security issue | Page indexing, Manual actions, Security issues reports[22] | Fix and request review if needed | Release checks with SEOps |
| Agency reports growth, sign-ups fall | Vanity metrics; brand mixed with non-brand | Segment brand; check conversions | Change reporting contract | Vendor policy |
Worked runbook: organic clicks fell by a third
Link to section “Worked runbook: organic clicks fell by a third”Diagram source (Mermaid)
flowchart TB
S["Clicks down 33%"]
D1{"Data anomaly?"}
D2{"Seasonal or demand shift?"}
D3{"Manual or security action?"}
D4{"Indexing errors or site move?"}
D5{"Core update running?"}
D6{"Impressions flat?"}
A1["Fix tracking"]
A2["Demand fell: no page fix, reset targets"]
A3["Fix, request review"]
A4["Hand to SEOps"]
A5["Wait a week, compare"]
A6["Test titles, snippets"]
A7["Self-assess pages"]
S --> D1
D1 -->|"yes"| A1
D1 -->|"no"| D2
D2 -->|"yes"| A2
D2 -->|"no"| D3
D3 -->|"yes"| A3
D3 -->|"no"| D4
D4 -->|"yes"| A4
D4 -->|"no"| D5
D5 -->|"yes"| A5
D5 -->|"no"| D6
D6 -->|"yes"| A6
D6 -->|"no"| A7
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef risk fill:#fbeceb,stroke:#b4332b,color:#122029
class D1,D2,D3,D4,D5,D6 decision
class A1,A2,A5,A6,A7 core
class S,A3,A4 risk
Text equivalent: After clicks fall 33%, ask in order and stop at the first yes: data anomaly (fix tracking); seasonal dip or demand shift (no page fix, reset targets); manual action or security issue (fix, request review); indexing errors or a site move (hand to SEOps); core update rolling out (wait a week after it ends, compare); impressions flat (test titles and snippets). If all are no, self-assess the pages.
Illustrative incident. Monday 09:00: the weekly report shows non-brand clicks down 33%.
- Data (15 min). Search Console’s data anomalies notes and the analytics tag; Google lists logging errors as a possible cause.[22] Normal.
- Seasonality and demand (15 min). 16 months, year on year, and the lost queries in Google Trends to see whether demand fell across the web.[22] No dip last year; demand steady.
- Penalties and security (10 min). Manual actions and Security issues reports: clean.[18]
- Technical (30 min). No site move or URL change was planned (moves cause fluctuations while Google
recrawls[22]). Page indexing shows 1,200 product guides newly excluded by
noindexsince Thursday’s release. Hand to SEOps and engineering with the URL pattern and release ID; they follow SEOps’ runbook and roll the template back the same day. - Recovery. Annotate; recovery depends on recrawling, so expect days to weeks.[2]
- Post-incident. Add a
noindexcheck for that template to the SEOps release gate; log detection time in the monthly review.
For a small drop (position 2 to 4), Google advises against radical changes to pages that already perform well.[22]
Anti-patterns and myths
Link to section “Anti-patterns and myths”| Anti-pattern or myth | Why it fails | Instead |
|---|---|---|
| “Publish more pages” as the target | Invites thin and scaled content; maintenance debt | Target useful coverage of the demand map |
| Changing dates to look fresh | Google names it a warning sign[19] | Update substantively or leave it |
| Disavowing links routinely | “most sites will not need” it; misuse can harm[48] | Only after a manual action or clear risk |
| Buying “AEO/GEO” hacks or llms.txt services | Google Search ignores llms.txt; optimising for AI features is SEO[20] | Same fundamentals, measured |
| Tool audit = roadmap | Third-party tools lack Google’s data[31] | Gate and score every finding |
| Agency owns the accounts | You stay responsible for its actions[1] | Ownership and access policy |
Deciding and adopting
Link to section “Deciding and adopting”When to use and when not to use
Link to section “When to use and when not to use”Use a formal model when organic search is a material source of customers, more than two or three people (or a vendor) touch search work, technical changes need engineering capacity, or leadership asks what SEO returns.
Do not build one when one person can follow Google’s starter guidance;[1] customers do not come from search; or the real problem is elsewhere: no useful content, a broken site (WebOps, SEOps), or no content process (ContentOps). The hidden responsibility is permanent: someone owns the backlog, measurement policy and vendor access every quarter.
Decision framework: in-house, agency or hybrid
Link to section “Decision framework: in-house, agency or hybrid”Diagram source (Mermaid)
flowchart TB
Q1{"Is organic search a material channel?"}
N1["Checklist only: one owner, quarterly review"]
Q2{"Do most gains need engineering or deep product knowledge?"}
Q3{"Fund a full in-house team?"}
Q4{"Fund one senior in-house lead?"}
Q5{"Fund in-house writers?"}
IC["In-house writers; agency for gaps"]
H["Hybrid: in-house lead, specialist vendors"]
I["In-house team"]
AG["Agency, with your accounts and policy"]
FR["Agency or fractional consultant, overseen by a named internal owner"]
Q1 -->|"no"| N1
Q1 -->|"yes"| Q2
Q2 -->|"yes"| Q3
Q2 -->|"no"| Q5
Q5 -->|"yes"| IC
Q5 -->|"no"| AG
Q3 -->|"yes"| I
Q3 -->|"no"| Q4
Q4 -->|"yes"| H
Q4 -->|"no"| FR
classDef decision fill:#fdf3e3,stroke:#c9800f,color:#122029
classDef core fill:#e8f3f2,stroke:#16756f,color:#122029
classDef neutral fill:#f1f4f6,stroke:#5b7a87,color:#122029
class Q1,Q2,Q3,Q4,Q5 decision
class I,H,IC,AG,FR core
class N1 neutral
Text equivalent: Not a material channel: a checklist with one owner. Material, but gains do not need engineering or product knowledge: in-house writers, with an agency for specialist gaps, if you can fund them; otherwise an agency in your accounts under your policy. Gains need them: a full in-house team if you can fund one; a hybrid if you can fund only a senior lead; otherwise an agency or fractional consultant overseen by a named internal owner.
The tree is an editorial, coarse filter: no independent study comparing agency and in-house outcomes was found. Work closest to engineering and product is hardest to outsource; vendors add specialist and market depth (Google lists expertise in specific markets among useful SEO services[1]). In every branch you keep the accounts and the policy. The table shows the reasoning for one branch: a mid-sized software company whose gains need engineering and which can fund one senior SEO but not a full team. Hybrid wins because it keeps most in-house access and continuity and adds depth one lead cannot cover.
| Criterion (weight) | In-house | Agency | Hybrid |
|---|---|---|---|
| Access to engineering and product (30%) | 5 | 2 | 4 |
| Specialist depth and market breadth (20%) | 2 | 5 | 4 |
| Cost predictability at small scale (20%) | 2 | 4 | 3 |
| Continuity and knowledge retention (20%) | 5 | 2 | 4 |
| Speed to start (10%) | 2 | 5 | 3 |
| Weighted score (out of 5) | 3.5 | 3.3 | 3.7 |
Illustrative scores for that company. In-house = 0.3×5 + 0.2×2 + 0.2×2 + 0.2×5 + 0.1×2 = 3.5. With a full team, in-house would score higher on specialist depth.
Maturity model
Link to section “Maturity model”This is the Atlas’s proposed model, not an industry standard.
| Level | Observable behaviour | Exit criteria |
|---|---|---|
| 1. Ad hoc | Requests by chat; rank screenshots; vendor owns accounts | One intake; organisation owns Search Console and analytics |
| 2. Managed | Scored backlog; SOPs for briefs and refreshes | Policy gate in use; brand/non-brand reporting with stated gaps |
| 3. Measured | Every shipped item has a hypothesis and verdict window | Most shipped items closed with a verdict; control groups for major changes |
| 4. Integrated | Engineering lane; SEOps release checks; refresh capacity reserved | No surprise template regressions for two quarters |
| 5. Learning | Confidence scores calibrated from past verdicts | Playbooks retired when evidence changes |
Adoption roadmap: 30/60/90 days
Link to section “Adoption roadmap: 30/60/90 days”| Window | Actions | Milestone |
|---|---|---|
| Days 1–30 | Move account ownership in-house; vendor and access policy; intake form; store 16 months of data | All requests through intake |
| Days 31–60 | Demand map for top topics; page inventory; scoring rubric; measurement policy; first cycle cut to capacity | First monthly review |
| Days 61–90 | Engineering lane; first control-group test; decay list; quarterly plan | First verdicts; plan approved |
Quick win: separating brand from non-brand often changes the story leadership hears.
Toolkit
Link to section “Toolkit”Checklists
Link to section “Checklists”Quick start
- Organisation is a verified owner of every Search Console property; vendors are users
- Intake form live; chat requests redirected to it
- One brand regex agreed, stored in the measurement policy and used in every report
- 16 months of data exported to your own storage
Before committing a cycle
- Every item passed the policy and duplicate gate
- Every item has an owner, hypothesis, measurement window
- Committed days ≤ available days per lane
Before publishing a page
- One target intent; no existing page serves it
- Human fact-check, including titles, descriptions and alt text
- At least one internal link to it from a relevant page
- Date changes only for substantive updates
Quarterly governance
- Access review (people and vendors; leftover verification tokens)
- Spam policy and Search Console changes reviewed
- Ten shipped items sampled for hypothesis and verdict
Templates
Link to section “Templates”One-page SEO charter
Programme: Organic search for <product/site> Owner: <name> Review: <quarter>
Mission: <one sentence on the value organic search should create>
Scope: <sites, markets, languages> Out of scope: <technical owner, paid search owner>
Outcomes (12 months): <non-brand clicks to X pages>, <organic conversions>, <verdict rate>
Capacity: content <n> days/cycle, SEO <n>, engineering <n> (agreed with <team>)
Policies: vendor and access policy v<n>; AI content rule; measurement policy v<n>
Non-goals: guaranteed rankings, paid links, pages without a user need
Risks: <top three> Escalation: <name> for policy, <name> for releases
Monthly review form
Period: <month> Prepared by: <analyst> Data gaps this month: <unsegmented %>
1. Outcomes: non-brand clicks, organic conversions, value per click (trend)
2. Verdicts: items closed (worked / no effect / harmed) with links to evidence
3. Decay: pages added to and removed from the refresh list
4. Incidents: drops, manual actions, policy issues, release regressions
5. Market: core updates, AI feature changes, Search Console changes
6. Decisions needed: <capacity, vendor, policy>
The intake form and vendor policy are in the reference implementation.
Deep comparisons
Link to section “Deep comparisons”| Approach | Best when | Weak when |
|---|---|---|
| SEO as a campaign (project bursts) | Launches, migrations, one-off fixes | Content decays between bursts |
| SEO as a programme (this page) | Search is a lasting channel | Small sites: overhead outweighs value |
| SEO embedded in product teams | Template-heavy sites with strong engineering | No one owns cross-team priorities |
| SEO folded into ContentOps | Publishers where content is the product | Technical debt has no owner |
Do we need a separate team? Usually not; an SEO lead can own the backlog, measurement policy and vendor access.
Why does our brand plus non-brand not equal total clicks? Query filters remove anonymized queries, which still count in the chart total.[15]
Should we block AI features to protect clicks? Only after measuring: exclusion removes your links from those features entirely and, Google says, does not affect AI training.[13] Compare the generative AI report with conversions first.
How long before we see results? Hours to several months, says Google; wait a few weeks before assessing.[2]
Is AI-written content against the rules? Not by itself. Pages generated mainly to manipulate rankings without adding value are, however they were made.[7][26]
Going further
Link to section “Going further”Advanced topics and emerging direction
Link to section “Advanced topics and emerging direction”- Established: page-bucket experiments, counterfactual models,[28][29] warehouse reporting from the bulk export.[33]
- Changing quickly (as of October 2026): generative AI reporting and controls;[12][13] browser agents acting for users, which Google’s guide treats as optional.[20]
- Open question: what clicks are worth as AI answers absorb simple queries. Evidence is one panel study and a disputed response;[43][44] measure your own.
Learning path
Link to section “Learning path”| Stage | Do this | Output |
|---|---|---|
| Prerequisites | Read Google’s SEO Starter Guide and the SEOps page | Shared vocabulary |
| 1-day primer | Read this page’s measurement part; run Lab 2 on your own export | A brand rule and a gap figure |
| 1-week practice | Build the intake form and score your current backlog (Lab 1) | A committed cycle |
| 30 days | Run the 30-day roadmap; write the vendor policy | Access register, measurement policy |
| Advanced | Run a control-group test (Lab 3); study CausalImpact | A tested verdict |
| Portfolio project | A one-quarter plan with capacity, gates and tests for a real site | A plan a leader could approve |
Wrap-up
Link to section “Wrap-up”Executive recap and cheat sheet
Link to section “Executive recap and cheat sheet”- Decide: is organic search material enough for a programme, and who runs it?
- Do: one intake; policy gate before scoring; cut to capacity; engineering lane; refresh share; verdicts.
- Measure: non-brand clicks (a lower bound), unsegmented share, organic conversions, verdict rate, decay backlog.
- Avoid: guaranteed-ranking vendors, paid links, scaled pages, date-only refreshes, rank screenshots as evidence.
- Next action: move account ownership in-house and write the brand rule this week.
A judgement call: 2,000 AI-drafted location pages or 60 refreshes?
Link to section “A judgement call: 2,000 AI-drafted location pages or 60 refreshes?”Situation (illustrative). A home-services company has a quarterly target of +20% organic leads. The growth team proposes 2,000 AI-drafted city pages (“Plumber in <city>”) with the same services text, ready in two weeks. The SEO lead proposes refreshing 60 decaying service guides and adding real local detail (technicians, response times, prices) for the 40 cities the company serves. Assumptions: similar cost; 40 real cities; fixed target.
Why the first option is attractive. Fast, large and easy to report.
Why it is probably wrong. Pages “generated for the primary purpose of manipulating search rankings and not helping users” are scaled content abuse whether or not AI wrote them,[7] and near-identical city pages for places the company does not serve resemble doorway abuse, a separate policy on the same page whose examples include pages “targeted at specific regions or cities that funnel users to one page”.[7] The downside is not just zero gain: it is demotion risk for the whole site and a large pruning job later.[17] The second option is slower and smaller on paper, but each page serves a real need and can be tested against a control group.
Decision. Refresh the 60 guides and build 40 genuinely local pages, test them in two waves, and report the expected shortfall against the target early. Uncertainty. The refresh may not reach +20% in one quarter; say so, rather than buying the number with risk.
Learning objectives and mastery check
Link to section “Learning objectives and mastery check”You should now be able to separate SEO Operations from SEOps, design intake, gate and scoring, state Search Console’s data limits, judge a change against a control group, choose a sourcing model and write a vendor policy.
1. A stakeholder asks why brand plus non-brand clicks are 15% below the total. What do you say?
Query filters exclude anonymized queries, which are counted in the chart total but never shown as rows. The gap is expected; report it as the “unsegmented share” and treat non-brand clicks as a lower bound.
2. Where does a request for 300 AI-drafted comparison pages go first, and why?
To the policy gate, before scoring. Scaled content abuse is judged by purpose and value, not by tool; a high reach estimate must not carry the item past the gate.
3. A refreshed page gained 10% clicks in six weeks. Is the refresh a success?
Not yet. Compare with a control group of similar pages over the same weeks; if controls also rose 10%, the refresh had no detectable effect. Also check whether a core update or seasonal change overlapped.
4. An agency asks for owner access to Search Console to run an audit. What do you grant?
A restricted user, not owner. Google advises read-only access for audits; a restricted user has view rights on most data, while a full user can take some actions and owners can add and remove users.
5. Clicks fell 30% but impressions are flat. Name two likely causes and one test.
Titles or snippets that no longer attract clicks, or results-page changes such as AI Overviews or competitors’ rich results. Test rewritten titles on one group of pages against a control group.
6. Why is the unweighted mean of row positions misleading?
It treats a query with 100 impressions like one with 50,000. Search Console averages the topmost position over impressions, so weight by impressions, and watch trends rather than absolute values.
Conclusion
Link to section “Conclusion”SEO Operations is not a discipline with its own standard; it is what SEO looks like when an organisation runs it deliberately. The work is unglamorous: one intake, a gate that says no, a backlog that respects capacity, and reports that admit what the data hides. Its value shows up as fewer wasted quarters, not a sudden jump. AI answers are changing search fast; the programmes that cope are those that measured honestly before the change, so they can tell what the change did.
Sources and further reading
Link to section “Sources and further reading”Most sources are Google’s, the most detailed public documentation for site owners; Bing’s cover its own tools. All
were opened on 2026-10-23; the evidence ledger is research/seo-operations-ledger.md.
Further reading: the Atlas pages SEOps, ContentOps, WebOps and AnalyticsOps.
Changelog. 2026-10-23 — r0: first version (research, ledger, draft, three executed labs, six diagrams). 2026-10-23 — r1: after independent review: coherent sourcing decision tree, paid search to MarketingOps, GA4 AI Assistant channel, one brand rule, Tag Manager rights, demand shifts in the runbook, wording fixes. 2026-10-23, post-score polish: EEA wording quoted, capacity heuristics labelled, Bing data, budget question in the sourcing tree.
Do you need an SEO? — Google Search Central, updated 2026-06-05. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
SEO Starter Guide — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Search Marketing Strategists (13-1161.01) — O*NET OnLine, updated 2026. Checked 2026-10-23. ↩︎
Are you our new Head of SEO Operations? — Builtvisible, 2021-04-13. Checked 2026-10-23. ↩︎
SEO Operations Manager (expired posting) — VirtualVocations, reviewed 2023-09-04. Checked 2026-10-23. ↩︎
SEO Ops Map — Overdrive Interactive, undated. Checked 2026-10-23. ↩︎
Spam policies for Google web search — Google Search Central, updated 2026-08-28. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Announcing Google Search Console - the new Webmaster Tools — Google Search Central Blog, 2015-05-20. Checked 2026-10-23. ↩︎
Google Search Essentials Replaces Google Webmaster Guidelines — Search Engine Roundtable (Barry Schwartz), 2022-10-14, citing Google’s update log entry of 2022-10-13. Checked 2026-10-23. ↩︎
Get started with attribution — Analytics Help, undated. Checked 2026-10-23. ↩︎ ↩︎
AI features and your website — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
Generative AI performance report (Search) — Search Console Help, rollout note dated 2026-08-31. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Search generative AI control — Search Console Help, rollout note dated 2026-08-31. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
What are impressions, position, and clicks? — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
A deep dive into Search Console performance data filtering and limits — Google Search Central Blog (Daniel Waisberg), 2022-10-19. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Search Quality Evaluator Guidelines (General Guidelines), section 12.7 — Google, 2025-09-11. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Google Search’s core updates and your website — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Manual actions report — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎
Creating helpful, reliable, people-first content — Google Search Central, updated 2026-10-05. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Optimizing your website for generative AI features on Google Search — Google Search Central, updated 2026-07-10. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Understanding Core Web Vitals and Google search results — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎
Debugging drops in Google Search traffic — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
About Keyword Planner forecasts — Google Ads Help, undated. Checked 2026-10-23. ↩︎
FAQ about Google Trends data — Google Trends Help, undated. Checked 2026-10-23. ↩︎
Link best practices for Google — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎
Guidance on using generative AI content on your website — Google Search Central, updated 2026-10-01. Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
RICE: Simple prioritization for product managers — Intercom (Sean McBride), 2018-01-05. Checked 2026-10-23. ↩︎ ↩︎
The math behind SearchPilot: how SEO A/B testing actually works — SearchPilot (Will Critchlow), updated 2026-10-05; vendor describing its own method. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Inferring causal impact using Bayesian structural time-series models — Brodersen et al., Annals of Applied Statistics 9 (2015). Checked 2026-10-23. ↩︎ ↩︎ ↩︎ ↩︎
The Consumer Reviews and Testimonials Rule: Questions and Answers — US Federal Trade Commission, November 2024. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Guidance on using third-party SEO tools, services, and advice — Google Search Central, updated 2026-06-05. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Performance report (Search results): Overview and basic setup — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎
About bulk data export of Search Console data to BigQuery — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Search Analytics: query — Google for Developers, updated 2026-08-11. Checked 2026-10-23. ↩︎ ↩︎
Performance report (Search results): About the data — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Performance report (Search results): Troubleshooting data discrepancies — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎ ↩︎
Connect Search Console to Google Analytics — Analytics Help, undated. Checked 2026-10-23. ↩︎
Unlocking insights with the new Bing Webmaster Tools Performance Report — Microsoft Bing (Fabrice Canel, Saral Nigam), 2023-09-21. Checked 2026-10-23. ↩︎
Introducing AI Performance in Bing Webmaster Tools Public Preview — Microsoft Bing (Krishna Madhavan et al.), 2026-02-10. Checked 2026-10-23. ↩︎
Default channel group — Analytics Help, undated. Checked 2026-10-23. ↩︎
Behavioral modeling for consent mode — Analytics Help, undated. Checked 2026-10-23. ↩︎
Minimize A/B testing impact in Google Search — Google Search Central, updated 2025-12-10. Checked 2026-10-23. ↩︎
Google users are less likely to click on links when an AI summary appears in the results — Pew Research Center, 2025-07-22. Checked 2026-10-23. ↩︎ ↩︎
Google AI Overviews are killing the web, Pew study shows (again) — The Register (Thomas Claburn), 2025-07-22, quoting a Google spokesperson. Checked 2026-10-23. ↩︎ ↩︎
RE2 regular expression syntax — Google RE2 project wiki, undated. Checked 2026-10-23. ↩︎
Managing owners, users, and permissions — Search Console Help, undated. Checked 2026-10-23. ↩︎ ↩︎
User permissions (Tag Manager) — Tag Manager Help, undated. Checked 2026-10-23. ↩︎ ↩︎
Disavow links to your site — Search Console Help, undated. Checked 2026-10-23. ↩︎