$ headless-seo-check http://127.0.0.1:4311 -a --json
--- stdout+stderr ---
headless-seo-check: checking http://127.0.0.1:4311 …
headless-seo-check: 23 URLs pointed at another host, checked on 127.0.0.1:4311 instead
headless-seo-check: 23 of 23 URLs selected, from http://127.0.0.1:4311/sitemap.xml
{
"tool": "headless-seo-check",
"version": "0.1.0",
"checked_at_unix": 1786210243,
"interrupted": false,
"notes": [],
"fatal": null,
"site": "http://127.0.0.1:4311",
"discovery": {
"source": "http://127.0.0.1:4311/sitemap.xml",
"total": 23,
"checked": 23,
"rebased": "23 URLs pointed at another host, checked on 127.0.0.1:4311 instead"
},
"pages": [
{
"url": "http://127.0.0.1:4311/",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": [
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/static",
"outcome": "checked",
"status": 200,
"ttfb_ms": 2,
"render_mode": "static",
"words": 325,
"internal_links": 17,
"findings": [
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/force-dynamic",
"outcome": "checked",
"status": 200,
"ttfb_ms": 3,
"render_mode": "dynamic",
"words": 323,
"internal_links": 17,
"findings": [
{
"kind": "dynamic-render",
"severity": "error",
"message": "rendered on every request, never cached at the edge",
"detail": [
"cache-control: private, no-cache, no-store, max-age=0, must-revalidate"
]
},
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/isr",
"outcome": "checked",
"status": 200,
"ttfb_ms": 2,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": [
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/noindex-meta",
"outcome": "checked",
"status": 200,
"ttfb_ms": 3,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": [
{
"kind": "noindex-meta",
"severity": "warn",
"message": " says noindex, yet this URL is offered for crawling",
"detail": [
""
]
},
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/noindex-header",
"outcome": "checked",
"status": 200,
"ttfb_ms": 1,
"render_mode": "static",
"words": 326,
"internal_links": 17,
"findings": [
{
"kind": "noindex-header",
"severity": "error",
"message": "blocked from indexing by a response header that does not appear in the page source",
"detail": [
"X-Robots-Tag: noindex, nofollow"
]
},
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/noindex-conflict",
"outcome": "checked",
"status": 200,
"ttfb_ms": 1,
"render_mode": "static",
"words": 325,
"internal_links": 17,
"findings": [
{
"kind": "noindex-header",
"severity": "error",
"message": "blocked from indexing by a response header that does not appear in the page source",
"detail": [
"X-Robots-Tag: noindex, nofollow"
]
},
{
"kind": "indexability-conflict",
"severity": "error",
"message": "the header and the HTML disagree about indexing, and the header is the one that counts",
"detail": [
"X-Robots-Tag: noindex, nofollow",
""
]
},
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
}
]
},
{
"url": "http://127.0.0.1:4311/canonical-self",
"outcome": "checked",
"status": 200,
"ttfb_ms": 1,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": []
},
{
"url": "http://127.0.0.1:4311/canonical-other",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 327,
"internal_links": 17,
"findings": [
{
"kind": "canonical-elsewhere",
"severity": "info",
"message": "canonical points at another page",
"detail": [
"http://127.0.0.1:4311/static"
]
}
]
},
{
"url": "http://127.0.0.1:4311/hreflang-good",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": []
},
{
"url": "http://127.0.0.1:4311/hreflang-drift",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 324,
"internal_links": 17,
"findings": [
{
"kind": "hreflang-drift",
"severity": "error",
"message": "the Link: header and the HTML advertise different URLs for 1 language",
"detail": [
"fr header: http://127.0.0.1:4311/fr/hreflang-drift",
"fr HTML: http://127.0.0.1:4311/fr/slug-traduit",
"fr the header target answers HTTP 200"
]
}
]
},
{
"url": "http://127.0.0.1:4311/hreflang-dead",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 327,
"internal_links": 17,
"findings": []
},
{
"url": "http://127.0.0.1:4311/hreflang-drift-dead",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 327,
"internal_links": 17,
"findings": [
{
"kind": "hreflang-drift",
"severity": "error",
"message": "the Link: header and the HTML advertise different URLs for 1 language",
"detail": [
"fr header: http://127.0.0.1:4311/fr/nexiste-pas",
"fr HTML: http://127.0.0.1:4311/fr/slug-traduit",
"fr the header target does not exist (HTTP 404)"
]
},
{
"kind": "hreflang-dead-target",
"severity": "error",
"message": "1 hreflang target in the Link: header do not exist",
"detail": [
"fr http://127.0.0.1:4311/fr/nexiste-pas — does not exist (HTTP 404)"
]
}
]
},
{
"url": "http://127.0.0.1:4311/hreflang-html-only",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 325,
"internal_links": 17,
"findings": []
},
{
"url": "http://127.0.0.1:4311/shell",
"outcome": "checked",
"status": 200,
"ttfb_ms": 0,
"render_mode": "static",
"words": 0,
"internal_links": 0,
"findings": [
{
"kind": "canonical-missing",
"severity": "warn",
"message": "no canonical link in the served HTML"
},
{
"kind": "empty-server-html",
"severity": "error",
"message": "the served HTML carries 0 words — Googlebot has to run JavaScript to see this page",
"detail": [
"7