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:

  1. Top 5 on Overview — urgent focus only.
  2. Full plan on Reportsall open Audit issues (no “see backlog on Audit tab”), with developer steps and acceptance.
  3. 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

FieldMeaning
issue_typeStable problem code (catalog below)
OwnerLanding dev / CMS editor / DevOps / content
Where to fix (dev)Layer: <head> template, sitemap, CMS field…
Developer stepsConcrete checklist
AcceptanceDone criteria before re-audit
URL / CMSWhere 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

TypeOwnerWhereFix
sitemap_unreachableLanding/sitemap.xml or Health URLValid sitemap 200
robots_unreachableOpsrobots.txtServe over HTTPS
robots_blocks_allOpsprod robotsRemove Disallow: / on prod
robots_sitemap_missingLandingrobots.txtSitemap: https://…
noindex_in_sitemapLandingrobots meta + sitemap filterIndexable XOR in sitemap
missing_canonicalLandingcanonical link / metadataAbsolute self URL
canonical_to_homeLandingcanonical templateDon’t hardcode homepage
http_4xxLandingroutes + redirects + sitemap200/301 or remove URL
http_5xxOpslogs / deployFix crashes
http_unreachableOpsDNS / TLS / WAFPage must open

On-page

TypeOwnerWhereFix
missing_titleDev / CMS<title> or meta_title20–70 chars, unique
duplicate_titleDevper-route metadataUnique titles
missing_descriptionContentmeta / CMS50–160 chars
missing_h1Dev / CMSone <h1> or #Visible H1
multiple_h1Dev / CMSextra h1 → h2Exactly one H1
thin_contentContentpage body200–400+ words or noindex
dirty_url_slugCMSslugascii + hyphens
images_without_altCMS / Devalt / cover_altMeaningful alt
missing_json_ldDevJSON-LDOrganization / WebSite / Article
schema_invalidDevJSON-LD buildJSON.stringify + validator

CMS

TypeOwnerWhereFix
cms_seo_readinessCMS editorBlog/KB meta, H1, altChecklist + Generate SEO
cms_no_website_urlCMS editorWebsite URLPublic HTTPS URL

Performance

TypeOwnerWhereFix
psi_low_scoreDevbundle, hero, CDNPSI Opportunities
cwv_lcpDevLCP media + TTFBPreload / WebP
cwv_clsDevsizes, fonts, bannersReserve space
cwv_inpDevJS / handlersFewer long tasks
slow_ttfbOpsSSR / edge cacheTTFB < ~800–1000 ms

Suggested order

  1. Ops: robots_*, http_5xx / unreachable, TTFB.
  2. Landing: sitemap, canonical, title/H1 template, JSON-LD, CWV.
  3. CMS editor: readiness, alt, article meta (AI generate in editor).
  4. 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).