I built a fact-checked meme explainer site with Next.js static export (and structured data for LLMs) A developer built a static Next.js 15 fact-checking site that explains viral memes, using the Rumpelstiltskin AI meme as its live example. The site pairs a short-answer band, a facts list, and a timeline of disagreeing sources with FAQPage, BreadcrumbList, and article JSON-LD generated from the same data that renders the visible FAQ so the two never drift. A single pageMeta() helper enforces canonical, OG, and Twitter tags, and all off-site citations route through one ExternalLink component. When a meme goes viral, the search intent is simple: what is this, where is it from, is it real? That’s an ideal case for a small static reference site. I built one for the Rumpelstiltskin AI meme, and here’s the setup. Stack: Next.js 15 App Router with output: "export", plain CSS, no database, deployed as static files. Page contract one topic per page : A short answer band at the top, so the verdict is the first thing a crawler or an LLM reads. A facts list Structured data: every page ships FAQPage and BreadcrumbList JSON-LD plus an article schema, generated from the same data that renders the visible FAQ so the two never drift. Meta consistency: a single pageMeta helper sets canonical, OG and Twitter tags, and pages can’t ship without it. Citations as data: each fact maps to an entry in a SOURCES list, and off-site links go through one ExternalLink component new tab, rel="noopener", no noreferrer, so cited sites can see the referrer . Live example, the Rumpelstiltskin meme explained, with a timeline page that sets sources side by side where they disagree. Happy to share the pageMeta and JSON-LD components if useful. What do you use for keeping structured data in sync with visible content?