Why metadata breaks quietly
Metadata has no visual failure state. A missing canonical, a truncated title or a page with no og:image renders perfectly fine in a browser — and leaks clicks and rankings for months until someone checks.
Nobody views source
Title truncation, duplicate descriptions and missing viewport tags are invisible on the rendered page. They only show up in an audit.
Small errors compound
One weak title costs little. Two hundred of them across a site is a systematic ceiling on click-through rate.
Shares look broken
A link pasted into Slack or LinkedIn with no og:title and og:image looks like spam — even from a trusted domain.
The checklist — what to verify on every page
| # | Item | Pass condition |
|---|---|---|
| 1 | Title tag | Present, unique, ~50–60 chars, primary keyword first |
| 2 | Meta description | Present, unique, ~140–160 chars, has a reason to click |
| 3 | Canonical URL | Self-referencing, absolute, no conflicts |
| 4 | Robots meta | No accidental noindex/nofollow on indexable pages |
| 5 | Viewport | width=device-width, initial-scale=1 present |
| 6 | Open Graph | og:title, og:description, og:image, og:url all set |
| 7 | Headings | One H1, logical H2/H3 hierarchy, no skipped levels |
| 8 | Images | Every meaningful image has alt text |
| 9 | Structured data | Valid JSON-LD where relevant (Article, Product, FAQ) |
Automate the whole pass
Checking nine items per page by hand stops being realistic after about ten pages. The free, open-source page-profile CLI runs the entire table above against any URL and returns a graded report:
npx page-profile https://example.com # single page report
npx page-profile --urls-from-file urls.txt # batch mode (Pro)
npx page-profile --compare old.html new.html # diff two versions (Pro)
Graded, not just listed
Each check gets a pass/warn/fail so you can triage instead of reading raw HTML dumps.
Batch & compare
Pro adds batch mode over a URL file, side-by-side compares and shareable HTML reports.
Runs locally
No account, no upload. Your client's staging URLs never leave your machine.
Frequently asked questions
What is a website SEO metadata audit?
It is a structured check of everything search engines and social platforms read before a human does: title tags, meta descriptions, robots directives, canonical URLs, Open Graph and Twitter cards, heading structure, image alt text and structured data. A good audit catches problems before they cost rankings or clicks.
How do I audit every page of my site without checking them by hand?
Use a crawler-style CLI tool that takes a list of URLs (or your sitemap) and reports each issue per page. The free page-profile command does exactly this: point it at a URL and it grades title length, description, canonical, viewport, Open Graph, headings and alt text in seconds.
How long should a title tag and meta description be?
Aim for roughly 50–60 characters for titles and 140–160 characters for meta descriptions. Longer text is truncated in results pages, which lowers click-through even when the page still ranks.
Is Open Graph really an SEO factor?
Not directly for ranking — but shares on Slack, LinkedIn, Facebook and X drive real traffic, and a missing og:image or og:title makes those shares look broken. Most audits treat social metadata as first-class because the traffic impact is measurable.
What should I fix first if the audit shows many issues?
Prioritise in this order: missing or duplicated titles and descriptions, wrong or conflicting canonical URLs, robots noindex on pages that should rank, then social tags and structured data. The first group affects indexing directly; the rest affect clicks.