Skip to content
Business Template6 columns · 5 sample rows· Updated

Technical SEO Audit & Meta Tags Matrix Markdown Table Template

A page-level SEO audit table answers one question per URL: is this page set up so search engines can crawl it, index the right version of it, and show a sensible title and snippet? It is the working document for a site launch, a migration, or a redesign sign-off. The developer reads it to find the routes with broken metadata, the SEO lead uses it to agree keyword targets with content owners, and whoever approves the release checks that nothing important is accidentally set to noindex.

Edit This Template

Edit cells, add rows, or sort — the Markdown updates live
Row
1
/
2
/pricing/
3
/blog/example-post/
4
/docs/getting-started/
✗ → /docs/
5
/search/
noindex
Output
| Page URL Route           | Primary Target Keyword  | Title Tag (Chars) | Meta Description (Chars) | Canonical Tag Match | Index Status |
| :----------------------- | :---------------------- | ----------------: | -----------------------: | :-----------------: | :----------: |
| `/`                      | example product name    |                52 |                      148 |       ✓ Self        |  Indexable   |
| `/pricing/`              | example product pricing |                41 |                      156 |       ✓ Self        |  Indexable   |
| `/blog/example-post/`    | example long-tail topic |                71 |                      163 |       ✓ Self        |  Indexable   |
| `/docs/getting-started/` | example setup guide     |                45 |                  Missing |    ✗ → `/docs/`     |  Indexable   |
| `/search/`               | —                       |                28 |                       96 |       ✓ Self        |  `noindex`   |
5 rows × 6 columns
Rendered Preview
Page URL RoutePrimary Target KeywordTitle Tag (Chars)Meta Description (Chars)Canonical Tag MatchIndex Status
/example product name52148✓ SelfIndexable
/pricing/example product pricing41156✓ SelfIndexable
/blog/example-post/example long-tail topic71163✓ SelfIndexable
/docs/getting-started/example setup guide45Missing✗ → /docs/Indexable
/search/—2896✓ Selfnoindex

When to Use This Table

Most rows in a real audit are boring, and that is the point. The value is in the exceptions: one template rendering the same title on 400 product pages, a canonical pointing at the HTTP version, a staging noindex that shipped to production. Remember that several columns record what you declared, not what Google did. A canonical tag is a hint; only URL Inspection in Search Console shows which canonical Google actually chose.

A trustworthy audit is generated by a crawler from rendered HTML and spot-checked by hand, records the crawl date, and treats character counts as a warning band rather than a rule. An untrustworthy one is typed from the CMS admin screen, reports meta keywords (Google has ignored that tag for years), and marks every canonical with a tick because the tag exists, without checking where it points.

Formatting This Table in Markdown

A technical seo audit & meta tags matrix table puts a few things in cells that Markdown treats as syntax. These are the ones to watch so it renders correctly on GitHub, GitLab, Obsidian and docs sites.

  • Page titles often contain a pipe

    Title tags such as “Pricing | Acme” contain |, which splits the cell even inside a code span. Write Pricing \| Acme in the source and renderers show a plain bar.

  • Keep text out of the character-count columns

    The template puts Missing in the meta description count column, which breaks scanning of right-aligned digits. Use 0 or — and put the reason in a notes column, and bold counts outside your limits (**71**) since colour is stripped.

  • Use ✓ and ✗ characters, not task-list syntax

    GitHub does not render [x] in table cells, so the canonical column uses ✓ and ✗ text. Pair each mark with a word (✓ Self) and use one set throughout, since ✓ and ✅ look different and may use different fonts; see checkmarks.

  • Code-span URLs you want to compare exactly

    Bare https:// URLs in a cell are autolinked, which hides the difference between http:// and https:// or a missing trailing slash. Put canonical targets in code spans, and give only the path (as in /pricing/) with the host stated once above the table.

What Goes in Each Column

ColumnAlignmentWhat to put here
Page URL Routeleft :---The path as it is served, in backticks, with the exact trailing-slash and case convention your site uses (/templates/, not /templates). If the audit covers several hosts or protocols, use the full URL instead, because http:// versus https:// and www versus bare domain are separate URLs to a crawler.
Primary Target Keywordleft :---One search phrase per URL, lowercase, taken from keyword research or Search Console queries rather than guessed. Flag any two rows sharing a keyword: one page should usually be merged, redirected, or retargeted.
Title Tag (Chars)right ---:The length of the rendered <title>, including any brand suffix your layout appends. Right-align the numbers so outliers stand out. Google truncates by pixel width, not a character count, so treat roughly 50–60 characters as a guide and read the full title too.
Meta Description (Chars)right ---:Character count of the meta name="description" content, right-aligned, with Missing written out when absent. There is no official length limit; Google trims snippets to fit the device and often writes its own from page text when that matches the query better, so the count flags extremes rather than defining a target.
Canonical Tag Matchcenter :---:Whether the rel="canonical" URL is exactly the audited URL (self-referencing), points elsewhere on purpose, or is missing. Compare the full string, including protocol, host, and trailing slash. Centered, with a short reason when it is not a match, such as “→ /templates/ (duplicate)”.
Index Statuscenter :---:The robots directive the page sends, from the meta robots tag or the X-Robots-Tag header: indexable, or noindex. Optionally add the Search Console page indexing status beside it, because a page can be indexable by directive and still sit in “Crawled - currently not indexed”.

How to Fill It In

  1. 1Export URLs from the XML sitemap and from a full crawl (Screaming Frog, Sitebulb, or a script) with JavaScript rendering on. Sitemap URLs no link reaches, and crawlable URLs missing from the sitemap, are both findings.
  2. 2Read titles, descriptions, canonicals, and robots directives from the crawler’s rendered-HTML export, not from source files or the CMS, because frameworks append suffixes and scripts can rewrite the head after load.
  3. 3Pull primary keywords from Search Console’s Performance report filtered by page: the queries that already earn impressions for that URL are better evidence than a keyword tool’s guess.
  4. 4For every canonical that is not a self-reference and every page in doubt, run URL Inspection in Search Console and record the Google-selected canonical next to the declared one.
  5. 5Note the crawl date and tool above the table, re-crawl after fixes ship, and keep both tables in the ticket as the audit trail. A diff of the two tables shows exactly what changed.

Ready-to-Paste Variations

Indexability triage

For launches and migrations: does each URL resolve, and which version does Google keep? Declared and selected canonicals sit side by side.

| URL | HTTP status | Robots directive | Declared canonical | Google-selected canonical | Search Console status |
| :--- | :---: | :---: | :--- | :--- | :--- |
| `/templates/` | 200 | indexable | self | self | Indexed |
| `/templates` | 308 | — | — | — | Page with redirect |
| `/search/?q=table` | 200 | `noindex` | self | — | Excluded by noindex tag |
| `/syntax/old-guide/` | 404 | — | — | — | Not found (404) |
| `/guides/tables/?ref=nav` | 200 | indexable | `/guides/tables/` | `/guides/tables/` | Alternate page with proper canonical tag |

Core Web Vitals by page template

Field data at the 75th percentile, grouped by template because one layout fix usually moves every page that uses it. INP replaced FID as the responsiveness metric in March 2024. Values below are placeholders for your own CrUX or Search Console data.

| Page template | LCP (p75) | INP (p75) | CLS (p75) | Status |
| :--- | ---: | ---: | ---: | :---: |
| “Good” threshold | ≤ 2.5 s | ≤ 200 ms | ≤ 0.1 | — |
| Home | 2.1 s | 140 ms | 0.02 | ✅ Good |
| Template detail | 3.4 s | 180 ms | 0.15 | ⚠️ Needs work |
| Converter tool | 1.8 s | 260 ms | 0.01 | ⚠️ Needs work |

Redirect map for a redesign

Every old URL, its destination, and the hop count. Chains and blanket redirects to the home page are where relaunches lose signals.

| Old URL | Status | New URL | Hops | Check |
| :--- | :---: | :--- | :---: | :---: |
| `/table-generator.html` | 301 | `/markdown-table-generator/` | 1 | ✅ |
| `/docs/syntax` | 301 | `/syntax/` | 2 | ⚠️ Chain |
| `/blog/2019/tables` | 302 | `/` | 1 | ❌ Temporary, to home |

Common Mistakes

  • Treating 60 and 160 characters as limits Google enforces.

    They are rules of thumb. Google truncates by pixel width and rewrites title links it finds unhelpful, so put the distinguishing words first and spend effort on duplicated or empty titles, not on ones that run to 63 characters.

  • Using robots.txt Disallow to remove pages from the index.

    A blocked URL can still be indexed from links, and Google cannot see a noindex on a page it is not allowed to crawl. Allow crawling, serve noindex, wait until the page drops out, and only then block it if crawl budget matters.

  • Ticking the canonical column because a tag exists.

    Compare the target string character by character. A canonical pointing at the http:// version, a missing trailing slash, or a staging hostname is worse than no tag, and these come from environment variables that differ between builds.

  • Auditing meta keywords or stuffing variants of the target phrase into the title.

    Google does not use the meta keywords tag. Drop that column entirely, write one natural title per page, and check the keyword column for two URLs targeting the same query.

  • Adding FAQ or HowTo structured data to every template to win rich results.

    Since 2023, FAQ rich results are shown only for well-known authoritative government and health sites, and HowTo rich results were removed. Audit structured data that can still produce a result for your page type, and validate it with the Rich Results Test.

Browse all 50 templates
FAQ

Technical SEO Audit & Meta Tags Matrix: Frequently Asked Questions

Does Google use my meta description?

Sometimes. Google builds snippets from page text when that answers the query better, and uses the meta description when it describes the page well. A specific, accurate description per page raises the odds; nothing guarantees it.

Do I need a meta robots “index, follow” tag on every page?

No. Indexing and following links is the default, so the tag adds nothing. The audit only needs to find pages that send noindex or nofollow, through either the meta tag or the X-Robots-Tag HTTP header, and confirm each one is intentional.

What is the difference between “Crawled - currently not indexed” and “Discovered - currently not indexed”?

Discovered means Google knows the URL but has not fetched it yet. Crawled means it fetched the page and decided not to index it for now, which often points to thin or duplicate content rather than a technical block, so the fix is usually editorial.

Should Core Web Vitals be part of a technical SEO audit?

Yes, as a companion table. The metrics are LCP, INP, and CLS, with good thresholds of 2.5 s, 200 ms, and 0.1 at the 75th percentile of real-user data. Lab tools such as Lighthouse can disagree with that field data.