{"description":"Structured SEO/AEO evaluation layer with checks, rationale, proof commands, evidence expectations, automation status, and the search-intent mapping strategy.","objective":"Give a future agent enough structure to start from the main URL and understand how to inspect, plan, build, validate, and improve a serious website without needing prior chat context.","checks":[{"id":"route-response-and-sitemap-coverage","category":"Crawlability","status":"implemented","severity":"critical","objective":"Confirm every required HTML route, machine route, internal link, and sitemap URL returns 200 in the static build.","why":"Search engines and answer systems cannot trust a site whose core routes, internal links, or sitemap entries do not resolve cleanly.","checkMethod":"Serve dist/ locally, request required routes, crawl internal links from core pages, parse sitemap.xml, and verify each sitemap URL resolves locally.","validationCommand":"npm run qa:routes","evidenceRequired":["PASS route QA","Sitemap URLs use PUBLIC_SITE_URL","No internal links return non-200"],"passCriteria":["All required routes return 200","All discovered internal links return 200","All sitemap URLs resolve"],"warningCriteria":["A route is reachable but missing from a discovery surface","A route is intentionally excluded but not documented"],"failCriteria":["Any required route, internal link, or sitemap URL returns non-200"],"sourceLessons":["Nectiv sitemap coverage was strong and should be preserved as a model."]},{"id":"metadata-canonical-h1-parity","category":"SEO","status":"implemented","severity":"critical","objective":"Confirm indexable pages have unique titles, useful descriptions, correct canonicals, explicit robots policy, and exactly one H1.","why":"Nectiv showed that a site can be strong overall while still shipping indexable pages with missing H1 or description details.","checkMethod":"Parse each core HTML page and validate title, description, canonical, robots, Open Graph, favicon, and H1 count.","validationCommand":"npm run qa:seo","evidenceRequired":["PASS SEO QA","One H1 per core HTML page","Descriptions stay inside snippet guidance"],"passCriteria":["Each core page has a unique title","Each core page has a 50-160 character description","Each core page has exactly one H1","Canonical and Open Graph URL match"],"warningCriteria":["A deliberately long title or description lacks an explicit AEO rationale"],"failCriteria":["Missing title, description, canonical, robots policy, Open Graph parity, favicon, schema, or H1"],"sourceLessons":["Nectiv /ai-instructions and /contact H1 gaps","Nectiv AEO experiment article missing meta description"]},{"id":"llm-and-agent-endpoint-presence","category":"AEO","status":"implemented","severity":"critical","objective":"Confirm LLM and agent-readable endpoints exist, are linked from the manifest, and expose the sections agents need.","why":"For AI-search and agent-facing work, model-readable surfaces are part of the product, not optional documentation.","checkMethod":"Request llms.txt, llms-full.txt, manifest JSON, formal contracts, schemas, roadmap, walkthroughs, site studies, and related endpoints.","validationCommand":"npm run qa:aeo","evidenceRequired":["PASS AEO QA","llms.txt includes key pages and machine endpoints","llms-full.txt includes Contract Registry and Site Studies"],"passCriteria":["llms.txt and llms-full.txt return 200","Manifest exposes all required agent sections","Every machine endpoint returns 200"],"warningCriteria":["A human doc contains guidance not reflected in machine-readable endpoints"],"failCriteria":["Missing LLM endpoint, missing manifest section, invalid JSON endpoint, or unregistered formal contract"],"sourceLessons":["Nectiv /llms.txt and /llms-full.txt 404 gap"]},{"id":"structured-data-entity-coverage","category":"Schema","status":"implemented","severity":"high","objective":"Confirm visible page content is supported by JSON-LD and schema discovery endpoints.","why":"AEO depends on stable entity clarity: Organization, WebSite, LocalBusiness, FAQPage, Service, Article, and breadcrumbs where relevant.","checkMethod":"Parse JSON-LD blocks on HTML pages and schema endpoints from schemamap.xml.","validationCommand":"npm run qa:seo && npm run qa:aeo","evidenceRequired":["PASS SEO QA","PASS AEO QA","schemamap.xml schema URLs return JSON"],"passCriteria":["Every core HTML page includes valid JSON-LD","Schema endpoints include Organization and WebSite","Home schema includes FAQPage and LocalBusiness"],"warningCriteria":["Schema exists but is thinner than visible page content"],"failCriteria":["Invalid JSON-LD, missing schema endpoint, or schema facts that do not match visible content"],"sourceLessons":["Nectiv stable Organization, WebSite, founder, Service, BlogPosting, and BreadcrumbList schema pattern"]},{"id":"real-site-findings-to-qa-loop","category":"Evaluation Feedback","status":"implemented","severity":"high","objective":"Turn every real-site study into reusable checks, roadmap links, and evidence paths.","why":"Good examples and bad examples are only useful if they become operational rules future agents can inspect and reuse.","checkMethod":"Validate site studies for strong patterns, avoid patterns, evidence files, and valid roadmap links.","validationCommand":"npm run qa:aeo","evidenceRequired":["PASS AEO QA","site-studies.json includes strongPatterns and avoidPatterns","Evidence files resolve on disk"],"passCriteria":["Each study has good and bad patterns","Each pattern explains why it matters","Each study links to roadmap items","Evidence files exist"],"warningCriteria":["A study has observations that do not map to a check, task, or explicit non-action"],"failCriteria":["A study lacks evidence, lacks good/bad distinction, or references an unknown roadmap item"],"sourceLessons":["Nectiv audit converted into reusable positive and negative patterns"]},{"id":"domain-variant-tls-and-redirects","category":"Prelaunch Domain QA","status":"planned","severity":"critical","objective":"Check apex, www, HTTP, HTTPS, redirect behavior, and certificate coverage for production domains.","why":"A static local build can pass while the production domain still has a broken www hostname, redirect chain, or certificate mismatch.","checkMethod":"Run production-domain checks after deployment using curl/OpenSSL or crawl tooling, then save evidence under reports/domain/.","validationCommand":"planned: reports/domain/domain-variant-check.md","evidenceRequired":["Apex HTTPS works","www HTTPS has valid certificate coverage","HTTP redirects cleanly to HTTPS canonical","No internal redirect chains"],"passCriteria":["Apex and www hostnames are covered by valid TLS","Canonical host is explicit","All non-canonical variants redirect cleanly"],"warningCriteria":["A non-canonical hostname works but redirects through more than one hop"],"failCriteria":["TLS mismatch, no-response hostname, redirect loop, or canonical conflict"],"sourceLessons":["Nectiv www TLS certificate mismatch"]},{"id":"crawl-export-indexability-comparison","category":"Crawl Evidence","status":"planned","severity":"high","objective":"Compare Screaming Frog crawl exports against sitemap, indexability, metadata, H1, response codes, and schema expectations.","why":"Local unit checks prove intent; crawl exports prove what a crawler actually sees across the rendered/static surface.","checkMethod":"Run Screaming Frog against the deployed or static-export URL and save exports under reports/crawl/.","validationCommand":"planned: reports/crawl/latest/analysis-notes.md","evidenceRequired":["Crawl overview","Internal all export","H1 missing export","Meta description missing export","4xx/no-response export","Sitemap coverage comparison"],"passCriteria":["No unresolved internal 4xx/5xx/no-response URLs","No indexable pages missing H1 or descriptions","Sitemap and indexable HTML inventory are reconciled"],"warningCriteria":["Crawler-visible external 403s need direct validation","Long snippets need explicit AEO rationale"],"failCriteria":["Unresolved internal broken URLs","Indexable page inventory mismatch","Missing crawl evidence before launch"],"sourceLessons":["Nectiv crawl exported sitemap/indexability, H1, description, and 4xx findings"]},{"id":"nectiv-derived-guardrail-suite","category":"SEO/AEO Source Lessons","status":"implemented","severity":"high","objective":"Convert the Nectiv audit gaps into a dedicated guardrail suite for LLM surfaces, indexable metadata, sitemap parity, crawler-visible errors, and production-domain evidence.","why":"The most useful real-site lessons should become executable checks. Otherwise future agents may praise the example without preventing the specific failure modes it revealed.","checkMethod":"Run a local static server, inspect llms endpoints, page metadata/H1/canonicals, sitemap coverage, crawl evidence, and domain evidence state.","validationCommand":"npm run qa:nectiv","evidenceRequired":["reports/seo-aeo/nectiv-derived-checks-report.json","PASS Nectiv-derived SEO/AEO QA"],"passCriteria":["LLM surfaces exist when AI/AEO claims exist","Indexable pages have H1, description, and canonical","Configured core pages are present in sitemap","Crawl evidence has no critical URL findings"],"warningCriteria":["Production-domain evidence has not been run because no canonical deployed URL is configured"],"failCriteria":["Missing LLM endpoints","Indexable page missing H1/description/canonical","Core page missing from sitemap","Critical crawl URL finding exists"],"sourceLessons":["Nectiv missing llms.txt/llms-full.txt","Nectiv indexable H1/meta gaps","Nectiv crawler-visible 4xx/media findings","Nectiv www TLS issue"]}],"search_intent_strategy":{"objective":"Map search intent to pages before writing them, so each page wins one question instead of diluting several.","why":"Technical SEO keeps a page eligible; intent mapping is what makes it the answer. Sites fail this by stacking multiple intents on one URL or splitting one intent across competing URLs.","intentTypes":[{"id":"informational","question":"What is X / how does X work?","pageShape":"Guide or glossary page with the direct answer first; FAQPage/Article schema.","demoExample":"/demo/logpilot/use-cases/"},{"id":"comparative","question":"X vs Y / which should I choose?","pageShape":"Comparison page with dated factual rows and the case where the alternative wins; FAQPage schema.","demoExample":"/demo/logpilot/comparison/"},{"id":"transactional","question":"Get/buy/book X near me or for my case.","pageShape":"Service or product page with scope, proof, qualification, and one CTA; Service/Product schema.","demoExample":"/demo/brightline/services/"},{"id":"local","question":"Does X serve my area?","pageShape":"Service-area page with explicit boundaries in copy and LocalBusiness schema.","demoExample":"/demo/brightline/service-areas/"},{"id":"navigational","question":"Find the official X page.","pageShape":"Stable entity page with canonical URL and consistent naming everywhere.","demoExample":"/demo/logpilot/"}],"mappingWorkflow":["Collect the real questions buyers ask (sales notes, support logs, search console once live) before inventing keywords.","Assign every question exactly one intent type and exactly one target page; a question with no page is a gap, two pages for one question is cannibalization.","Write the page's direct answer before the supporting copy, and put the question's words in the title and H1.","Record the mapping in the page brief so traceability covers intent as well as claims."],"internalLinkArchitecture":{"rules":["Hub pages (services index, resources index) link down to every spoke; every spoke links back to its hub and sideways to 2-3 related spokes.","Anchor text uses the target page's canonical term, never bare 'learn more' (also an accessibility rule).","Every defined term links to one canonical definition page; the crawl-stress orphan check enforces that sitemap pages stay reachable from the homepage."],"why":"Internal links are how crawlers and answer engines learn which page is the canonical answer for a term; diluted or missing anchors waste the structure."},"checks":["One intent per indexable page (review the page brief).","Title and H1 carry the mapped question's vocabulary.","Direct answer appears before nuance on informational and comparative pages.","No two pages target the same mapped question.","Orphan and anchor rules pass via npm run qa:crawl-stress and the accessibility name checks."],"objectiveAlignment":"Closes the strategy half of SEO: eligibility comes from the technical checks, selection comes from intent mapping."}}