Skip to content
Metaspry

Docs

Audit rules

Every rule Metaspry checks, what it means, why it matters and how it is weighted in the 0-100 score.

Last verified against the web app (547aebd) and extension 1.0.27.

The audit runs 19 rules and produces a 0-100 score, weighted by rule severity. Required rules carry the most weight, recommended rules less, best-practice rules least. Pending rules (image-dimensions) count as half-credit until resolved.

The default thresholds and severity weights below are user-customizable - see Custom scoring rules.

Each rule ends with the fix the web app shows under a warning or failing row; the Docs link on that row opens the rule’s section on this page. The six required rules are also the ones that trigger a drift alert when one of them starts failing on a monitored page.

Web app scan page with title, description and og:description length warnings, each showing Fix text, a Docs link and Add task Web app scan page with title, description and og:description length warnings, each showing Fix text, a Docs link and Add task
In the web app, every warning or failing rule shows its fix, a Docs link to this page and Add task.

Required (10 pts each)

Page title

Verifies a <title> tag exists and is non-empty.

Fix: Add a <title> tag inside <head> that names the page, e.g. “Pricing - Acme”.

Meta description

Verifies meta[name="description"] exists.

Fix: Add <meta name="description" content="…"> with a one- or two-sentence summary of the page.

Open Graph title

Verifies meta[property="og:title"] exists.

Fix: Add <meta property="og:title" content="…">; social cards show it as the headline.

Open Graph description

Verifies meta[property="og:description"] exists.

Fix: Add <meta property="og:description" content="…"> so social cards have a summary line.

Open Graph image

Verifies meta[property="og:image"] exists. The dimension check is a separate best-practice rule.

Fix: Add <meta property="og:image" content="https://…"> pointing at a 1200×630 image.

Indexable

Fails if meta[name="robots"] or meta[name="googlebot"] contains noindex or none.

Fix: Remove “noindex” (or “none”) from the robots / googlebot meta tag if this page should appear in search.

Open Graph URL

og:url should anchor the canonical share URL.

Fix: Add <meta property="og:url" content="…"> with the canonical URL you want shared.

Open Graph type

og:type (e.g. website, article).

Fix: Add <meta property="og:type" content="website"> (or “article” for posts).

Twitter card type

twitter:card controls the Twitter preview layout.

Fix: Add <meta name="twitter:card" content="summary_large_image"> to choose the X/Twitter card layout.

Canonical URL

<link rel="canonical"> prevents duplicate-content issues.

Fix: Add <link rel="canonical" href="…"> with the preferred URL of this page.

Article OG metadata

When og:type=article, also checks article:author, article:published_time, article:section.

Fix: On og:type “article” pages, add article:author, article:published_time and article:section.

hreflang self-reference

When <link rel="alternate" hreflang> exists, one should reference this page.

Fix: Add an hreflang alternate link that points at this page itself, beside the other languages.

Best-practice (3 pts each)

Title length

30-60 characters by default. Pro changes the range in the web app’s Scoring rules or in the extension’s Settings.

Fix: Rewrite the title to fit your length range (30-60 characters by default, see Custom scoring rules).

Description length

70-160 characters.

Fix: Rewrite the meta description to fit your length range (70-160 characters by default).

og:description length

50-200 characters.

Fix: Rewrite og:description to fit your length range (50-200 characters by default).

og:image is absolute URL

Must be http:// or https://, not relative.

Fix: Use a full URL for og:image (starting with https:// or http://), not a relative path.

og:image dimensions (async)

Loads the image, reads naturalWidth x naturalHeight. >=1200x630 passes; >=600x315 warns; below fails.

Fix: Use an og:image of at least 1200×630 pixels (600×315 is the minimum).

No duplicate meta tags

Warns if any key (lowercased) appears more than once.

Fix: Keep one tag per name: remove the repeated meta tags the audit lists.

JSON-LD parses cleanly

Parses every <script type="application/ld+json">. Fails if any block throws.

Fix: Fix the JSON syntax in the <script type="application/ld+json"> block(s) that fail to parse.

How the score is computed

earned   = sum(weight x status_credit) across all rules
possible = sum(weight) across all rules
score    = round((earned / possible) x 100)

Pass = full weight. Warn = half weight. Pending = half weight (until resolved). Fail = zero.

Color bands

  • 80+ - success (emerald)
  • 50-79 - warning (amber)
  • <50 - danger (rose)

A failing required rule (for example noindex) caps the band at needs work (amber) whatever the score, so a noindex page that scores 85 reads “Needs work: a required check is failing” instead of healthy; the number itself is unchanged (web app, shared reports and /check now; extension 1.0.29 and later).