SEO Module¶
Module ID: seo | Type: Core (always enabled) | Weight: 30%
The SEO module extracts and scores fundamental search engine optimisation signals from raw HTML. It checks everything search engines use to understand, index, and rank your pages.
What It Checks¶
| Check | What It Looks For |
|---|---|
| Title tag | Presence, length (50--60 chars optimal), uniqueness |
| Meta description | Presence, length (120--160 chars optimal) |
| H1 heading | Exactly one H1 per page |
| Heading hierarchy | Proper nesting (no skipped levels) |
| Canonical URL | <link rel="canonical"> present |
| Open Graph tags | og:title, og:description, og:image, og:url |
| Twitter Card tags | twitter:card, twitter:title, twitter:description |
| Structured data | JSON-LD blocks with valid @type |
| Robots meta | No accidental noindex/nofollow |
| Viewport meta | Mobile-friendly viewport tag |
| Language attribute | lang on the <html> element |
| Image alt text | All <img> tags have descriptive alt attributes |
Scoring Breakdown¶
The SEO score starts at 100 and deducts points for each issue:
| Criterion | Deduction | Condition |
|---|---|---|
| Missing title | -15 | No <title> tag found |
| Title too short/long | -5 | Outside 30--70 character range |
| Missing meta description | -10 | No meta description tag |
| Meta description too short/long | -5 | Outside 70--200 character range |
| Missing H1 | -10 | No H1 tag on the page |
| Multiple H1s | -5 | More than one H1 tag |
| Missing canonical | -5 | No canonical link element |
| Missing Open Graph | -5 | Missing og:title or og:description |
| Missing robots meta | -3 | No robots meta tag |
| Accidental noindex | -15 | Page is set to noindex unintentionally |
| Missing viewport | -5 | No viewport meta tag |
| Missing lang attribute | -3 | No lang on html element |
| Images without alt | -2 per image | Up to -10 total |
Auto-Detection¶
This module is always enabled (ALWAYS_ENABLED = True). It runs on every audit regardless of profile or detection signals.
Example Findings¶
P1 HIGH: Missing meta description
The page has no meta description tag. Search engines will auto-generate
a snippet, which may not represent your page well.
Fix: Add <meta name="description" content="Your 120-160 char description">
Effort: Low
P2 MEDIUM: Multiple H1 headings (3 found)
Having more than one H1 dilutes the page's topic signal for search engines.
Fix: Keep one H1 as the main heading, convert others to H2 or H3.
Effort: Low
P2 MEDIUM: Missing Open Graph tags
Social sharing previews will not display correctly without og:title,
og:description, and og:image tags.
Fix: Add OG meta tags in the <head> section.
Effort: Low
Related¶
- Content Quality module -- checks readability and keyword overlap with title/H1
- Schema Validation module -- validates JSON-LD structured data in depth
- Sitemap Analysis module -- checks XML sitemap coverage and structure