Complete SEO workflow For site owners, marketers and in-house SEOs who run SEO on a real site from the first audit to measured results. Steps 21
Checklist items 142
Language English
What it is for
Run SEO on a real site from first research to measured results: audit, plan, per-page fixes, release, a check after the right waiting time, and a quarterly re-run.
For site owners, marketers and in-house SEOs who run SEO on a real site from the first audit to measured results.
Steps and what they prove 21
Scope, goals and access One primary outcome and at most two supporting outcomes written with source, filter and period (the note text), confirmed by the user in the scope readback. Brand term list recorded (company name, product name, common misspellings) for the branded versus non-branded filter in step 2. Access table: Search Console property type and verification method, GA4 role, CMS, hosting or CDN and logs, each with level and the date checked. Manual actions and Security issues reports checked, with the exact message or the words "no issues" and the date. Update window status read from the Google Search Status Dashboard, with the latest core or spam update name and dates, noted. Change rules recorded (approver, release process, freeze dates), plus the user's own words on markets and on any customer-visited location, noted for step 9. Context variable round set to 0 and the user's agreement to the scope readback recorded as a note. Baseline and measurement setup Comparison windows written with exact start and end dates, the export date, and the Google update dates that fall inside them. Search Console Performance exports saved (Date, Page, Query; total and non-branded) with the brand regex, totals from the Dates file, and the API or monthly export set up for full page and query history. Pages indexing counts by reason, the Sitemaps table and the Core Web Vitals good, needs improvement and poor counts for mobile and desktop recorded with the date. GA4 key events (3 to 5) listed, each with the date it was tested, plus the organic landing-page export with Organic Search and AI Assistant side by side. Rank-tracker panel of 30 to 100 queries listed with country, device and language, and a seven-day position range per query. Annotation log started with updates, releases, tracking changes and the September 2025 impressions break, and checkpoint dates (2, 6 and 12 weeks; link work 6 to 12 months) in the calendar. One-paragraph baseline summary with non-branded clicks, impressions, CTR, position, organic sessions and key events for each window, plus the known distortions. Technical crawl and indexability robots.txt text saved with the date read and a one-line statement of what it blocks, including whether CSS, JavaScript and sitemap lines are affected. Page indexing report table saved: each not-indexed reason with its page count and example URLs, plus the two warnings if present. Crawl export saved with the settings used (mode, limits, URL sources) and with crawl depth and inlink columns; counts of pages by status code, redirect chains and loops, canonical mismatches. Lists with counts and example URLs: noindex pages that should be indexed, sitemap URLs not returning 200, missing or duplicate titles, H1s and meta descriptions, URL-variant duplicates and parameter patterns. URL Inspection results (indexed and live test) for a sample of key URLs (rule of thumb 20 to 50, all on a small site), with the Google-selected canonical for each. Orphan page list with the sources used, and the raw against rendered HTML finding for a JavaScript site (or the words "not a JavaScript site"). Issue list as run notes: type, number of URLs, three examples, source report, proposed fix and first severity. Page experience and Core Web Vitals Core Web Vitals report counts (good, needs improvement, poor) for mobile and desktop saved with the report date, or the words "not enough field data" with the device. List of failing URL groups: template name, failing metric, threshold crossed, number of URLs and the share of organic sessions that land there. Lab run (tool, device settings, date) for one representative URL per failing template, with the LCP element, long-task or shift source found. Page experience checklist per template: HTTPS, mobile display, excessive ads, intrusive interstitials, main content easy to tell apart, each yes or no. Prioritised fix notes, each with template, current field value, proposed change, effort estimate, owner and planned re-read date. Annotation log line for each released fix and the date Start Tracking was pressed (or the reason it has not been pressed yet). Keyword and intent research Seed phrase list with the source of each phrase (sales calls, support tickets, forums, Search Console) saved as a note or file. Search Console Queries export (non-branded, window from step 2) with the near-miss rows (position 11 or worse, high impressions, few clicks) marked. Keyword map saved: cluster, intent class, content type, format, angle, volume and difficulty with the tool named, business potential 0 to 3, mapped URL and action. For each cluster in the target set, the top ten results checked (titles and features) with the date, or the user's pasted copy of them. Cannibalisation list from Search Console: the query and each URL that gets impressions for it, with the proposed decision. Target set of 10 to 20 clusters and a parking list recorded as run notes, with the user's confirmation of the business scores. SERP and competitor analysis Fixed observation settings written down: country, language, device, date, private window yes or no One SERP record per priority query (10 to 20 queries) with the top 10 URLs, the three Cs and the features seen, from pasted text or screenshots AI Overview present or not noted per query, with cited sites where visible Competitor list of 5 to 10 domains with the method named (tool report or frequency count across top 10 lists) Gap list scored with the step 5 rules, each gap with a query or subtopic and the competitor URL that ranks A verdict per query (go, later, drop) with a one-sentence reason, agreed with the user Content audit Inventory sheet attached or pasted: every audited URL with type, two 3-month Search Console windows, GA4 organic sessions and key events, and its step 3 Page indexing reason Scope stated (all URLs or top 20 percent) with the number of URLs audited and the row count of each export One action (keep, improve, merge, prune) and a one-sentence reason per URL, the pages the user marked do not touch listed Merge groups listed with the surviving URL and the redirect pairs (old URL, new URL, type) Each prune candidate checked for backlinks, other traffic sources and purpose, with the check result written next to the URL Review dates set for too-new pages and for pages marked improve Architecture and internal linking Cluster list with pillar URL, cluster URLs and the keyword group for each page, from the step 5 map Click depth report: count of pages per depth and the list of valuable pages deeper than 3 clicks (or a statement that there are none), with the crawl export named Orphan list with a decision per URL (link, noindex, merge, delete) and a one-sentence reason Link plan: target URL, source URL, anchor text, location on page, reason, for every proposed link Check that no planned link targets a redirecting, 404 or non-canonical URL, with the check method named User decision recorded on any menu or URL structure change Structured data Inventory of existing structured data by template: type, format, source and validation result, from a crawl export or pasted page source Decision per template on the types to add, change or remove, with FAQPage and review or rating markup decided explicitly JSON-LD or CMS field mapping for each chosen type, matching the visible content of one example URL per template Rich Results Test and Schema Markup Validator output attached for one URL per template Sheet with URL, title, h1, meta description and character counts for the sample URLs of each template (or the whole crawl), with missing, duplicate and over-length rows flagged Branch decision written down (local, international, neither) with the answer the user gave about location and language versions Local SEO (optional) Eligibility decision recorded (physical location, service area or not local) with the user's answer and the Google guideline points checked List of every profile found for the business, with duplicates marked and a decision for each Screenshot or export of the final profile fields: name, categories, address or service area, phone, hours, description, website link NAP source-of-truth text and a directory list with each listing's status (correct, fixed, missing) Review request method written down, neutral wording, and the date the current Google review policy was checked LocalBusiness markup validated on each location page, with the tool output attached, and a baseline of searches, calls and direction requests International SEO (optional) Decision recorded: the branch applies or does not apply, with the Search Console Countries export (date range and top countries by clicks) attached. Per-market check: for each market the re-run of steps 5 and 6 (queries, intent, top 10 with country, language and device) and which queries get their own version page. Inventory table attached: one row per page, the equivalent URL in each language or region version, or "none". Chosen URL structure and hreflang method written down with the reason, including the check that no automatic IP or language redirect exists. Crawl or hand-check report before the changes: number of URLs per hreflang issue type (missing return link, invalid code, non-indexable target). The same report after the changes, with its date, showing zero missing return links and zero invalid codes. Canonical check: a list of all version URLs with their canonical, each pointing to itself, attached as an export. Page indexing report check for "Duplicate, Google chose different canonical than user" on the version URLs, with the count. Link and authority plan Manual actions report checked: screenshot or text with the date, including "No issues detected" if that is the result. Backlink export attached with date and tool name, cleaned to a table of referring domains with classification counts. Competitor referring-domain counts for the priority queries listed with date and tool (the results from step 6). Anchor text summary with the share of brand, URL, descriptive and exact-match commercial anchors, from the export. Written list of allowed and refused link tactics, and the attribute rule for paid, user-generated and other outbound links, approved by the user. Campaign list: owner, asset, target list and end date for each campaign, entered as backlog items for step 13. Disavow decision recorded: "none" with the reason, or the proposed file with the manual action or evidence that justifies it. Prioritised backlog Backlog complete: one run note per item with URL or "site-wide", problem, fix and priority line, and every finding from steps 2 to 12 accounted for or marked "not now" with a reason. Each priority line contains the number that supports the score (clicks, impressions, position, Traffic Potential or affected URL count) and the source step. Dependencies written in the notes, with blockers for crawling and indexing placed first in the order of work. Page list attached in order of work, one URL per line, and the count of lines recorded (zero means the exit "nothing to fix"). Context variable pagesLeft set to the number of lines in the page list, and the value written in a note. Site-wide items listed separately with an owner, to be done in step 15, and not counted in pagesLeft. Planned release date and the nearest update window from the Search Status Dashboard recorded, with the date checked. User approval of the order, the "not now" items and the batch size recorded with the date. Fix one page Before record saved in the page note: title, meta description, H1, H2 list, canonical, links in and out, markup, and the baseline clicks, impressions and position with the date range. Brief written for the page: target query, primary intent decided from the results page, outline, proof required, internal links to add. After record saved: new title, description, H1, headings, and the list of internal links added with source and target URLs. Fact-check note attached: every number, date, quotation and claim checked, with the source, and a named human author or reviewer. Structured data on the draft validated in the Rich Results Test, with the result recorded, or "none needed" with the reason. Redirects needed by the page (merged or moved URLs) listed for the redirect map of step 15. pagesLeft lowered by 1 and the new value written in the note, and the page marked ready for release, or the page deferred with a "deferred: <blocker>" note and the same lowering. Staging, redirects and release Frozen change set list attached: every page, template, redirect, robots.txt and sitemap change in the release, with owner and date. Staging crawl export compared with the production crawl: counts of indexable URLs and a list of every unexpected difference. Redirect map file attached (old URL, new URL, code, reason) and the redirect test export showing one hop and final status 200 for each row, or a stated sample if untested. Leftover check recorded: no noindex, no site-wide robots.txt block, no staging host in canonicals, sitemap or links, each with the method used. Copies of the previous robots.txt, sitemaps and redirect rules saved, and the rollback plan written with owner, time to revert and trigger conditions. User go decision and the release date and time recorded, with the annotation added to the measurement log. Smoke test result after release (home page, five key pages, five redirected URLs, robots.txt, sitemap) and the baseline Page indexing and sitemap counts exported with the date. Verify it is live and indexable Verification table: every released URL with status code, final URL, declared and Google-selected canonical, robots directive and pass or fail, as pasted rows or a spreadsheet URL Inspection results (text or screenshots) for each priority URL, showing last crawl date, indexing allowed and both canonicals Raw response headers (curl -sI output or Network tab) for pages and redirects, checked for X-Robots-Tag and the redirect type (301/308 vs 302) Sitemaps report screenshot with status and discovered URL count, plus confirmation that the file lists only 200 canonical URLs Page indexing report export or screenshot from after the release, compared with the one from before, with new reasons listed If step 11 ran: hreflang check result per priority page (self-reference, return links, codes, alternates returning 200); if IndexNow was used: the submission and its response code Annotation log entry with release date, verified date, URLs verified, URLs excluded from the measurement with the reason, and the expected effect One run note per failed row (URL, problem, fix, priority) and the re-check result after the fix Wait and measure The three read dates (about 2, 6 and 12 weeks after the verified date) written in the run notes, with which ones have been reached Search Console export for the changed pages: two equal full-length periods plus the same period a year earlier, brand and non-brand split, with property and export date GA4 organic landing-page export with sessions, engaged sessions and key events, Organic Search and AI Assistant side by side Rank tracker export for the fixed query panel with country, device and language settings noted List of Google core and spam updates inside the period, with dates from the Search Status Dashboard Comparison table per page or cluster: baseline value, current value, change, window reached, confounders, early verdict Review: did it move? Confirmation that the verdict window was reached for the pages in scope, then the new value of round (1, 2 or 3) written in the run notes with the date Written rule for "moved" with the weekly baseline range (lowest and highest non-brand clicks) for each changed page, fixed before looking at current numbers Classification table per page: moved, not moved, worse, too early or confounded, with the evidence and the cause label (technical or content) URL Inspection result and Page indexing reason for every page that did not move, as text or screenshots Live SERP for the target query of each content-cause page, pasted or screenshotted, with the intent mismatch noted One run note per page that goes back (URL, evidence, cause, proposed action) and the chosen exit with its reason and the user's agreement Report Reader and decision named in the run notes (operator, programme owner or executive), with the format and place the user asked for Opening summary of two or three sentences with goal, main metric before and after, source, confounders and a confidence level Table of shipped changes by release date and page group, taken from the annotation log Comparison table with the verdict per page, the stated definition of moved, and a no-verdict-yet mark where a window is not reached List of Google updates inside the period with dates from the Search Status Dashboard, and seasonality compared with the same period last year Source appendix: property, filters, export date and file or screenshot for every number in the report User's corrections to the draft and the date the final version was accepted Monitoring and quarterly decision One-page runbook with the weekly, monthly and quarterly checklists, a named owner for each, the alert channel and the escalation triggers First completed weekly check (Page indexing report, Sitemaps report, rank panel) as screenshots or exports, to serve as the normal to compare with Update watch set up: link or feed of the Search Status Dashboard in the weekly check and the date of the monthly documentation changelog review Post-deploy guard added to the release checklist (robots.txt, noindex and X-Robots-Tag, canonicals, key redirects, sitemap) with the date added Archive of the Search Console export with its date, and the date of the next monthly export Redirect retention date (one year after the move) entered in the calendar, if the programme included a move Chosen exit (quarterly re-run or finish) with the reason, the user's agreement, and the new quarter and round values if re-running Handover and yearly cadence Attach the ownership table with a named owner and back-up per area, and list every row without a name as an open risk Attach the access list (Search Console properties and permission levels, GA4, CMS, hosting, DNS) with a last-checked date per row and no credentials Attach the runbook table: task, frequency (weekly, monthly, quarterly, yearly), who, and where to look, including the monthly Search Console export Attach the locations list: links or file names for baseline, backlog, redirect map, reports, annotation log and the earliest date redirects may be removed Attach the yearly checklist with a named month, the update playbook and the update calendar read from the Search Status Dashboard with the read date Attach the decision log with decision, reason, rejected alternatives and review date for at least the decisions of this run Attach the final summary: counts of items done, open and dropped, what moved with the comparison period, what did not, uncertainties and the next dated actions Record the owner's confirmation from the chat that the owner row and the first dated action are correct The assistant closes a checklist item only with evidence of what it did, so a finished run shows the work was done, not only claimed.
Use it
Create a free account, connect your assistant and run this workflow in a chat. You come back to this page after signing up.
Use this template
Not sure yet? Watch a demo run first, no account needed.
Already have an account? Sign in