GEO wave 3: HowTo schema on 3 blog posts + fix blog 500
The blog was silently 500'ing every /blog/<slug>/ URL in production
— caught while wiring the HowTo schema. Root cause: astro.config
sets output:'server' globally (needed for Stripe webhook + auth),
which makes getStaticPaths() a no-op unless the individual route
opts into prerender. Astro warned at build time; nothing caught the
runtime crash because HEAD returned the Cloudflare 500 page HTML
(itself a 200 to a HEAD-checking crawler).
Fixes:
1. src/pages/blog/[...slug].astro
Added `export const prerender = true` so getStaticPaths runs
and every blog post ships as a static page.
2. HowTo schema on 3 top answer-engine-value blog posts:
- indirect-prompt-injection-examples: 6 defensive steps
(enumerate tools reading untrusted content → taint labels →
tool-call gateway → sensitive-sink policies → human review
queue → tamper-evident audit).
- what-is-ai-agent-runtime-safety: 6 setup steps
(instrument framework → decide allow/block/pending → 3-layer
cascade → route pending → tamper-evident audit → alerts).
- hipaa-compliant-ai-agents: 7 §164.312 implementation steps
(map tools to specs → audit gateway → minimum-necessary →
integrity hash → auth → transmission TLS → BAA enforcement).
Combined with existing HowTo on prompt-injection-langchain,
llm-tool-call-auditing-setup, and stablecoin-agent-security-travel-rule,
that's 6 blog posts now shipping HowTo rich results — the schema
answer engines (Google AI Overviews, ChatGPT SGE, Perplexity) use
most aggressively for "how do I ..." queries.
Verified: all 6 posts return HTTP 200 and include "@type":"HowTo"
in their JSON-LD.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> J
Justin Yuan committed
411bdcdac9bcbe7aeca76ee80cd001f34849ed6f
Parent: 705c1bc