Google Sheets SEO templates are useful when each row leads to a clear decision: which page to improve, which link to repair, or which change to investigate. A spreadsheet cannot collect reliable search data or make those decisions just because its headers look complete.
These 26 starter templates give you copyable tables for research, content, technical checks and reporting. Each includes an example and explains what to do with the result. The layouts use manual inputs and ordinary spreadsheet formulas; they require no paid add-on to use as shown. Your chosen data source may have its own access limits or costs.
All sample URLs, businesses, dates and metrics below are fictional. Replace them with your own evidence before acting.
Set up your SEO workbook
Start with the task you need, rather than creating all 26 tabs. The groups below help you choose a starting point.
| Your immediate task | Templates | Useful output |
|---|---|---|
| Decide what to research or write | 1-5 | Evidence, a destination and a usable brief |
| Manage content and links | 6-10 | Assigned work with a verification step |
| Investigate technical issues | 11-16 | Observations separated from intended behavior |
| Review on-page details and experience | 17-21 | Specific fixes tied to a page or component |
| Explain performance and local accuracy | 22-26 | Comparable measurements and checked business details |
Each code block is tab-separated text. Copy a whole block into cell A1 of a blank tab. If it remains in one column, save it as a .tsv file and use File > Import, selecting the Tab separator. Google's import instructions explain the available import locations. Choose a new sheet rather than replacing existing work.
The first line becomes the headers. Keep the example temporarily so you can check the column positions, then replace it. Freeze the header and apply filters to the complete table. Sort whole rows together; sorting only a metric column disconnects values from their URLs.
Add a Readme tab containing the property or hostname, source, export timestamp, date range, country, device, search type and applied filters. Keep original exports in separate Raw_ tabs. Analysis tabs should reference those inputs instead of overwriting them with decisions.
Preserve URL paths, identifiers and locale codes as text. Store real dates consistently and record the timezone. Google Sheets' locale settings affect date and number formatting; the formulas here use English function names and comma arguments. Your locale may require different argument separators.
A blank metric means unavailable, not zero. Where that distinction affects a decision, add data_state with values such as available, not exported or not measured. Keep observed values separate from proposed changes. For team use, append owner, status, evidence_ref and observed_on where the template does not already include them.
Do not paste untrusted imported text as executable formulas. Review values beginning with formula characters, keep raw imports as text where appropriate, and limit sharing to the people who need the underlying data.
Research and planning templates
1. URL inventory
Use one row per exact URL to establish which pages exist before planning changes. Combine URLs from your CMS, sitemap and crawl, retaining the source of each observation. A sitemap alone should not be treated as a complete inventory of every accessible page.
url page_type discovery_source observed_on status_observed owner next_action
https://example.com/desks/ category crawl-01 2026-10-20 200 Mina Review category purpose
Add a separate row when a query string or path case differs; decide later whether it represents equivalent content. Do not silently lowercase every URL or remove parameters just to simplify matching.
The output is a reconciled list with gaps to investigate. For example, a CMS page absent from a crawl may be unlinked, excluded from that crawl's scope, or inaccessible. Check which explanation applies before labeling it an orphan or deleting it. Keep the original URL and any proposed normalized key in different columns.
2. Keyword evidence register
Use one row per phrase, market and evidence source. This prevents an autocomplete suggestion from quietly becoming a measured search-volume estimate.
phrase market language source observed_on monthly_volume data_state next_action
oak desk dimensions US en autocomplete observation 2026-10-20 not measured Review the current results
Collect phrases from genuine customer questions, your site's Search Console data or another identified source. If a metric is supplied, add its source, units, market and measurement period. Different sources can describe different populations; do not merge their numbers without understanding them.
Here, the useful next action is to investigate what a searcher needs to measure. The blank volume is deliberate. The row can justify research without claiming demand has been quantified. Remove phrases that do not fit the business even if they sound popular.
3. Keyword-to-page assignment
Use one row per query cluster and intended destination within a defined market. Unlike the evidence register, this tab records an editorial choice.
cluster_id reader_task target_url url_state decision evidence_ref owner
K001 Choose an oak desk size https://example.com/guides/desk-size/ existing Review current guide serp-review-01 Mina
Compare the existing page with the task before assigning it. Several related phrases may fit one destination. Two URLs receiving impressions for related wording are a reason to investigate their purposes, not automatic proof that one must be removed.
The row should finish with a specific decision: retain the assignment, improve the existing page, investigate a gap, or hold. Our keyword mapping templates add fields for ecommerce, local services, documentation and other site types when this basic structure is insufficient.
4. Search-result intent review
Use one row per inspected result for a query and search context. Record what the page actually helps someone do, rather than inferring everything from its title.
query market_device observed_on result_url page_format reader_outcome useful_gap
choose desk size US desktop 2026-10-20 https://example.org/desk-guide/ measurement guide Measure room and legroom No small-room example
Open relevant results and compare their substance, examples and limitations. Preserve the query, location and observation date because results can vary. A single captured result set is not a stable ranking benchmark.
Use the gap column to make a defensible brief, such as adding an illustrated small-room measurement example. Do not combine every competitor heading into your outline. Some sections may serve a different audience, repeat an idea, or make unsupported claims that your page should avoid.
5. Content brief
Use one row per commissioned page. The brief connects the reader task to the evidence and deliverable the writer must supply.
brief_id working_title reader_outcome required_example source_needed existing_page_check owner
B001 How to Measure for a Desk Choose a fitting desk Small-room measurement walkthrough Verified dimensions Compare desk-size guide Mina
Link longer source notes or an outline from additional columns instead of forcing paragraphs into every cell. Specify what is outside scope and what would make the draft unacceptable. In this example, a list of desk styles would not replace the promised measurement procedure.
Before commissioning a new URL, resolve the existing-page check. The brief may become an update to the current guide. A spreadsheet approval records a handoff; it does not establish that product dimensions, quotations or other consequential facts have been verified.
Content and link workflow templates
6. Editorial calendar
Use one row per content deliverable, whether it is a new page or an update. Keep the intended publication date separate from its actual live date.
deliverable_id brief_id content_action owner due_date status live_url actual_live_date
E001 B001 Update desk-size guide Mina 2026-11-03 Drafting
Link the brief rather than retyping its requirements. Use a short set of statuses your team understands, such as planned, drafting, reviewing and published. Agree on who can move work between them.
The example is still drafting, so its live fields are empty. After publication, record the real canonical URL and verify that the expected content appears there. A CMS save or scheduled date is not evidence that readers can access the finished page. Filter by owner and due date to expose blocked work without mistaking a full calendar for completed output.
7. Content audit decision log
Use one row per page under review. Bring together its purpose, relevant evidence and proposed action, rather than using low traffic as an automatic removal rule.
url reader_task performance_scope content_finding proposed_action evidence_ref approval_state
https://example.com/guides/desk-size/ Measure for a desk Last complete 28 days Missing depth measurements Update example audit-note-01 Needs review
Read the page as well as its metrics. A support reference, seasonal page or newly published article may serve a useful purpose despite few search visits. Add business importance and technical observations when they affect the choice.
The output should explain why to keep, improve, investigate consolidation or consider removal. The content audit guide covers those decisions in depth. Preserve approval and implementation as later steps; a proposed merge in this sheet should not be mistaken for a redirect already in place.
8. Content refresh change log
Use one row per specific change to a page. This differs from the audit log: it records what actually changed and when, so later analysis has a meaningful reference.
change_id url change_description implemented_on verification_ref followup_question
R001 https://example.com/guides/desk-size/ Added seated-height measurement example 2026-10-20 public-readback-01 Did relevant queries change?
Capture an old-versus-new excerpt or revision reference. Leave implemented_on blank until the change is applied, and keep a separate planned date if needed. Verify the public page rather than relying only on an editor preview.
When reviewing performance later, also record other relevant changes, seasonality and measurement differences. A rise after a refresh does not by itself show that the refresh caused it. The log creates a dated hypothesis you can investigate; it is not a controlled experiment or proof of a ranking improvement.
9. Internal link opportunities
Use one row per proposed source-to-destination relationship. Inspect the source paragraph and target page before choosing an anchor.
source_url target_url placement_context proposed_anchor state verification_ref
https://example.com/guides/home-office/ https://example.com/guides/desk-size/ Paragraph about room measurements measure for a desk Proposed
The useful output is an exact placement that helps a reader continue. Explain why the destination adds detail at that point. Do not insert a link merely because a phrase appears somewhere on the page.
After editing, record whether the link is present on the live source and leads to the intended destination. An existing contextual link may make a second one unnecessary. Keep proposed and implemented states separate, and revisit the row if the destination is renamed, redirected or no longer answers the promised task.
10. Relevant outreach prospects
Use one row per public resource page that might benefit from a specific contribution. This is a relevance worksheet, not a list of harvested private contact details.
prospect_page audience_fit proposed_resource specific_reason checked_on decision
https://example.org/home-office-resources/ Small-space workers https://example.com/guides/desk-size/ Adds a practical measurement example 2026-10-20 Review editorial fit
Read the page and confirm the proposed resource is genuinely useful and current. Record the exact omission your resource addresses. A high authority score alone does not explain why an editor should add a link.
Remove unsuitable prospects before any contact. If the page has no relevant editorial opportunity, retain an excluded state rather than searching for a pretext. This template neither sends messages nor promises a backlink. Any later outreach should respect the recipient's stated process and avoid misleading claims about the resource or relationship.
Technical SEO review templates
11. Broken internal link repair queue
Use one row per source-page and linked-target pair. A destination error is easier to fix when the row identifies where the link appears.
source_url linked_url anchor_or_context observed_status checked_on proposed_fix state
https://example.com/guides/desks/ https://example.com/old-sizing/ Sizing instructions 404 2026-10-20 Link to current sizing guide Proposed
Populate this from link extraction and a status check, keeping the check method in an evidence reference. Recheck transient failures before handing them off. Confirm that a replacement actually fulfills the original anchor's promise.
After repair, verify the source link and destination again. Finding a replacement does not mean every old URL should redirect there. Our broken internal link workflow explains a more detailed investigation; this table keeps each repair attached to its source.
12. Redirect mapping and verification
Use one row per old URL and intended destination. Record the expected behavior separately from what a request actually returns.
old_url intended_target expected_status observed_first_status observed_final_url verification_state
https://example.com/old-desk/ https://example.com/desks/oak/ 301 302 https://example.com/desks/oak/ Review mismatch
A matching final URL does not establish that the first redirect has the intended status or that there is only one hop. Keep the full observed chain in a linked evidence file if it is too long for a cell.
Check that the destination is relevant and that redirect rules do not conflict or loop. The redirect-chain guide covers implementation checks. This worksheet is the reviewed map and release evidence; importing rows into Sheets does not install server redirects.
13. Canonical declaration review
Use one row per examined URL, retaining both your intended canonical and its observed declaration. Add Google's selected canonical only when you have URL Inspection evidence.
examined_url intended_canonical declared_canonical google_selected data_state next_action
https://example.com/desks/?sort=price https://example.com/desks/ https://example.com/desks/ not inspected Check content equivalence
The example declaration matches the intended value, but the Google-selected field is unknown. Do not fill it by copying the HTML value.
Google's canonicalization guidance describes canonical annotations as signals. Review whether pages are actually duplicate or very similar, whether the target works, and whether other signals conflict. A spreadsheet equality check cannot establish that consolidation is appropriate or that Google has accepted the preference.
14. Crawl and indexing evidence register
Use one row per URL and dated inspection. Separate access rules, indexing directives and the search engine's reported state.
url observed_on crawl_rule indexing_directive gsc_index_state evidence_ref next_action
https://example.com/guides/desk-size/ 2026-10-20 Allowed No noindex observed Not inspected response-01 Inspect intended public URL
Record the relevant user agent and whether the observation came from headers, HTML or a live inspection. No noindex observed is narrower than a complete indexability assessment, and neither proves that a page is indexed.
Google's robots.txt explanation distinguishes crawling controls from keeping a page out of Search. Do not use a blocked crawl as proof of deindexing. Resolve the actual mismatch before recommending a directive change, particularly when private or intentionally excluded pages are involved.
15. Sitemap-to-inventory reconciliation
Use one row per URL being compared with a specific sitemap snapshot. Retain which source showed it and what the site's intended inclusion policy is.
url in_inventory in_sitemap intended_inclusion snapshot_ref next_action
https://example.com/guides/desk-size/ Yes No Include sitemap-01 Check sitemap generation
Compare exact URLs rather than deleting parameters or changing case first. A missing entry can mean a stale snapshot, a generation issue, an intentional exclusion or a scope mismatch.
The output is a list to review, not a command to add every CMS record. Confirm that the intended destination is the current public URL and that its page purpose matches the inclusion policy. Keep sitemap presence separate from actual indexing evidence; a URL appearing in the file does not show that Google has indexed it.
16. Hreflang relationship checks
Use one row per source-to-alternate relationship. Include the declared locale and checks in both directions, rather than keeping only a list of language folders.
source_url locale alternate_url self_reference_checked return_reference_checked evidence_ref
https://example.com/en/desks/ de https://example.com/de/schreibtische/ Pending Pending hreflang-01
First confirm that the destinations serve the intended equivalent task and language or regional audience. Then inspect the actual annotations and applicable self-references and return references.
Google's localized-page guidelines require fully qualified alternate URLs and describe the relationship requirements. Merely placing de beside a URL does not create a valid annotation. The pending example is a checklist row, not deployable markup. Use another row for the reverse relationship so missing references are visible instead of assumed.
On-page and experience templates
17. Title and description review
Use one row per URL with observed metadata and a reason for any proposed rewrite. Preserve the old text so an editor can assess the change.
url observed_title proposed_title observed_description proposed_description reason
https://example.com/desks/oak/ Desks Oak Desks in Three Sizes Browse furniture. Compare oak desks by width and storage to choose one for your room. Describe the actual selection
Add title_characters in G1 and =LEN(C2) in G2 to count the proposed title. It returns 24 for this example. Character count is an editing aid, not a fixed Google display limit or a ranking rule.
Review whether the wording accurately describes the page and distinguishes it from neighboring pages. After an edit, inspect the live metadata. For performance-led changes, use the CTR diagnosis guide before attributing low CTR to the title alone.
18. Structured-data validation log
Use one row per page, markup type and dated check. Store the exact validation finding and whether the underlying information matches the visible page.
url markup_type checked_on validation_finding visible_content_check evidence_ref next_action
https://example.com/guides/desk-size/ Article 2026-10-20 No errors in saved test Author matches page validation-01 Review current feature requirements
Use the relevant validator and current documentation for the intended search feature. A syntactically valid object is not the same as complete feature eligibility. The markup must describe the actual page.
Google's structured-data introduction explains the connection between markup and supported search features. Keep a test result separate from evidence that a rich result appeared. Mark the latter unknown unless observed; this worksheet does not promise a search enhancement.
19. Image alt-text review
Use one row per image occurrence on a page, not just per image file. The same asset can serve different purposes in different contexts.
page_url image_url page_context current_alt proposed_alt review_state
https://example.com/guides/desk-size/ https://example.com/images/legroom.jpg Measurement step Measuring clearance between chair arms and desk underside Needs visual review
Inspect the actual image and nearby content before accepting the proposed wording. Distinguish a missing attribute, an empty attribute and text that fails to explain the image's purpose. Do not automatically fill every empty value: decorative images can need different treatment.
The example wording is a suggestion awaiting inspection, not a claim about a downloaded image. Follow Google's image guidance for descriptive, relevant text and avoid inserting unrelated keywords. Record the verified live attribute after implementation.
20. Core Web Vitals evidence log
Use one row per page or reported group, device and observation window. Keep field evidence and individual lab runs separate.
subject device evidence_type measurement_window metric value unit evidence_ref
https://example.com/desks/ mobile field 2026-09-23 to 2026-10-20 LCP 3.1 seconds performance-01
Add one row for each metric you are investigating, with its own unit. Do not put a lab performance score in the LCP column or treat a sitewide origin result as a measurement of one specific URL.
Google's Core Web Vitals guide covers loading, responsiveness and visual stability through LCP, INP and CLS. Use the log to connect a finding to a page template or component and a verification plan. A faster lab run can help diagnosis, but does not establish that a field reporting window has already improved.
21. Faceted URL policy review
Use one row per meaningful filter pattern or representative state. Record the visitor benefit and intended treatment before changing crawling or indexing rules.
url_pattern representative_url visitor_task distinct_value policy_state next_action
/desks/?width=* https://example.com/desks/?width=120 Find a desk that fits Inventory and usefulness unreviewed Undecided Inspect selection and existing category
Check the real selection and whether another page already satisfies the same task. A filter generating a URL is not enough evidence that the URL deserves a separate search landing page.
After a policy is approved, add separate columns for observed status, canonical declaration, crawling rules and indexing directives. Reuse the relevant technical worksheets for verification rather than inferring one control from another. This template records a policy decision; it does not prescribe noindex or canonicalization for every parameterized URL.
Search performance and local templates
22. Search Console page comparison
Use one row per page under the same reporting scope. Match property, search type, filters and period length before comparing values. Keep both exact date ranges in the Readme or additional columns.
page period_pair clicks_before clicks_after impressions_before impressions_after
https://example.com/desks/ Two matched 28-day periods 40 55 1000 1100
In G1 enter click_change, then put =D2-C2 in G2. The example returns 15. In H1 enter click_change_pct, then put this in H2 and format it as a percentage:
=IF(C2=0,"No baseline",(D2-C2)/C2)
The result is 37.5%. A zero baseline produces an explicit message instead of a misleading percentage. For CTR, calculate clicks divided by impressions for each period; the example moves from 4% to 5%. That is one percentage point, not a one-percent relative increase.
Use Google's Performance report export as the input. Most page performance is assigned to the canonical URL, so a missing duplicate URL should not immediately be interpreted as having no search activity. Review the page, query mix and measurement scope before choosing an action.
23. Search Console query comparison
Use one row per query and matched scope, keeping its interpretation separate from the measurements. This reveals which questions changed within a page-level trend.
query page_filter clicks_before clicks_after impressions_before impressions_after next_question
oak desk width Exact desk category URL 12 8 300 400 Did result position or query context change?
The fictional row has fewer clicks despite more impressions. That is a prompt to examine position, the result and the landing page; it is not proof that a title rewrite is the right fix.
Google documents query privacy and truncation limits. Visible query rows do not necessarily sum to the chart totals, and a phrase missing from an export is not automatically zero. Keep not exported distinct from a measured zero. Do not manufacture a complete demand estimate by adding up your site's query impressions.
24. Fixed-scope ranking observations
Use one row per keyword, search location, device and observation date. Retain the observed ranking URL so a position movement is not detached from a destination change.
keyword location device observed_on position observed_url source_ref data_state
oak desks Austin US desktop 2026-10-20 8 https://example.com/desks/oak/ rank-export-01 available
Enter your actual export or observation. This layout does not fetch rankings automatically. A missing result needs a state such as outside captured range or check failed, not an invented position.
Compare observations only when the scope and measurement method match. Search Console average position is a different metric from a single fixed-location rank observation; keep them in separate columns or tabs. Our ranking report guide explains the contextual fields needed to make a movement useful. Record what to investigate, rather than treating every one-day shift as an urgent content problem.
25. Organic search business outcomes
Use one row per landing page, period and consistently defined traffic scope. Record the event definition alongside the result so an event rename or tracking change is visible.
landing_page period traffic_scope sessions qualified_enquiries enquiry_definition tracking_state
/desks/oak/ 2026-10-01 to 2026-10-28 Session Organic Search 200 6 Accepted enquiry event v1 Reviewed
Add enquiries_per_session in H1 and =IF(D2=0,"No sessions",E2/D2) in H2. With these fictional values it returns 3% when formatted as a percentage. This is the ratio you defined, not automatically a platform's built-in session key-event rate. Multiple events per session or a changed enquiry definition alter its meaning.
Keep Search Console clicks and analytics sessions separate. If joining datasets, confirm URL format, period, timezone and source scope first. A blank outcome field may reflect unavailable or incomplete tracking rather than no business value. Use the comparison to ask which landing pages need investigation; do not label all observed enquiries as incremental revenue caused by SEO.
26. Local citation accuracy checks
Use one row per business location and public listing page. Compare what the listing actually shows with a verified, business-approved reference.
location_id listing_url field_checked approved_value observed_value checked_on action_state
LOC01 https://example.org/listings/example-desks/ Business name Example Desks Example Desk Warehouse 2026-10-20 Confirm discrepancy with owner
Check names, public contact details, hours and destinations only where they apply to the business. Keep separate rows for different fields so a correct website link does not hide outdated opening hours.
Distinguish harmless formatting differences from facts that could mislead a customer. Confirm the correct value before requesting an update, particularly for service-area businesses or listings with special display rules. Do not publish a private address merely to fill a cell. This worksheet documents accuracy and follow-up; it does not promise that citation consistency alone will improve local rankings.
Check the workbook before making changes
Review one completed row from source to proposed action before expanding the sheet. The important checks are whether its evidence is current, its scope is clear and someone can perform and verify the next step.
For lookups, use a stable key with one meaning in the selected scope. For example, name the tab from template 3 Map. In a separate analysis tab, enter K001 in A2 and this formula in B2:
=IFNA(VLOOKUP(A2,Map!$A$2:$G$1000,3,FALSE),"Not found")
It returns the example target URL, https://example.com/guides/desk-size/. Google's VLOOKUP documentation explains exact-match mode and first-match behavior. Resolve duplicate keys before using the result. Include market or another scope identifier in the key if the same cluster has different destinations. Do not assume text lookup behavior is equivalent to byte-for-byte URL identity.
Keep lookup failures explicit. Replacing every error with zero would turn a missing join into an apparently measured result. Use consistent data types, and check that a copied formula still points to the intended columns. If you later use QUERY, mixed types in a column can cause minority-type values to be treated as null, so clean the input deliberately.
Before sharing or acting, check:
- The rows retain their original URL, source date and measurement context.
- Numbers are numeric, percentages have the intended denominator, and unknowns remain identifiable.
- Sorting and filters cover whole rows; formulas and manually approved values occupy separate columns.
- A proposed action has an owner and an acceptance condition, such as a corrected public link or verified live metadata.
- No row marked complete relies solely on a planned date, CMS preview or unverified assumption.
Start with the template that resolves today's decision. Add another tab when it answers a different question, and retain only the fields someone will maintain. A small, evidenced workbook is more useful than a large dashboard whose missing values and unverified fixes look finished.