How to fix Health / SEO issue types — where in code or CMS, and how to verify.
SEO — developer runbook
After an audit in CMS Site → Health / SEO, the report includes:
- Top 5 on Overview — urgent focus only.
- Full plan on Reports — all open Audit issues (no “see backlog on Audit tab”), with developer steps and acceptance.
- Copy runbook (MD) — markdown with every task.
A full text appears after a new audit (or “Create digest”). Older reports are enriched from playbooks by issue_type.
See also Site Health / SEO.
How to read a report
| Field | Meaning |
|---|---|
issue_type | Stable problem code (catalog below) |
| Owner | Landing dev / CMS editor / DevOps / content |
| Where to fix (dev) | Layer: <head> template, sitemap, CMS field… |
| Developer steps | Concrete checklist |
| Acceptance | Done criteria before re-audit |
| URL / CMS | Where to reproduce |
After fixes: Run audit and compare score / open issues.
API
GET /v1/cms/sites/{siteId}/seo/reports/{reportId}
GET /v1/cms/sites/{siteId}/seo/reports/{reportId}/developer-doc
POST /v1/cms/sites/{siteId}/seo/digest
POST /v1/cms/sites/{siteId}/seo/scans
developer-doc → { data: { markdown, items, report_id } }.
issue_type catalog
Crawl / indexability
| Type | Owner | Where | Fix |
|---|---|---|---|
sitemap_unreachable | Landing | /sitemap.xml or Health URL | Valid sitemap 200 |
robots_unreachable | Ops | robots.txt | Serve over HTTPS |
robots_blocks_all | Ops | prod robots | Remove Disallow: / on prod |
robots_sitemap_missing | Landing | robots.txt | Sitemap: https://… |
noindex_in_sitemap | Landing | robots meta + sitemap filter | Indexable XOR in sitemap |
missing_canonical | Landing | canonical link / metadata | Absolute self URL |
canonical_to_home | Landing | canonical template | Don’t hardcode homepage |
http_4xx | Landing | routes + redirects + sitemap | 200/301 or remove URL |
http_5xx | Ops | logs / deploy | Fix crashes |
http_unreachable | Ops | DNS / TLS / WAF | Page must open |
On-page
| Type | Owner | Where | Fix |
|---|---|---|---|
missing_title | Dev / CMS | <title> or meta_title | 20–70 chars, unique |
duplicate_title | Dev | per-route metadata | Unique titles |
missing_description | Content | meta / CMS | 50–160 chars |
missing_h1 | Dev / CMS | one <h1> or # | Visible H1 |
multiple_h1 | Dev / CMS | extra h1 → h2 | Exactly one H1 |
thin_content | Content | page body | 200–400+ words or noindex |
dirty_url_slug | CMS | slug | ascii + hyphens |
images_without_alt | CMS / Dev | alt / cover_alt | Meaningful alt |
missing_json_ld | Dev | JSON-LD | Organization / WebSite / Article |
schema_invalid | Dev | JSON-LD build | JSON.stringify + validator |
CMS
| Type | Owner | Where | Fix |
|---|---|---|---|
cms_seo_readiness | CMS editor | Blog/KB meta, H1, alt | Checklist + Generate SEO |
cms_no_website_url | CMS editor | Website URL | Public HTTPS URL |
Performance
| Type | Owner | Where | Fix |
|---|---|---|---|
psi_low_score | Dev | bundle, hero, CDN | PSI Opportunities |
cwv_lcp | Dev | LCP media + TTFB | Preload / WebP |
cwv_cls | Dev | sizes, fonts, banners | Reserve space |
cwv_inp | Dev | JS / handlers | Fewer long tasks |
slow_ttfb | Ops | SSR / edge cache | TTFB < ~800–1000 ms |
Suggested order
- Ops:
robots_*,http_5xx/ unreachable, TTFB. - Landing: sitemap, canonical, title/H1 template, JSON-LD, CWV.
- CMS editor: readiness, alt, article meta (AI generate in editor).
- Re-run audit → score up, issues closed.
What the audit does not do
It does not scrape SERP rankings by itself. Organic and average position come from GSC / Yandex Webmaster. The to-do list is Check site (recommendations; you apply them on the live site).