prisma/content-seo-geo
Optimize a prisma.io page for search engines and AI answer engines. Use when writing or reviewing blog posts, docs pages, or landing pages for SEO, GEO, AEO, AI citations, AI Overviews, ChatGPT/Perplexity visibility, featured snippets, metadata, or FAQ sections; when refreshing an existing page for freshness or rankings; or when asked why a page isn't ranking or being cited.
npx skills add https://github.com/prisma/web --skill content-seo-geo
Optimize one page at a time so that AI engines cite it and search engines rank it. Being cited by AI engines is the primary goal and ranks above search engine rankings: an AI assistant that quotes and recommends Prisma reaches developers (and their coding agents) before a search results page ever loads. Search ranking is the supporting mechanism, since ranked pages get retrieved and cited more often. When a trade-off appears, choose what makes the page more quotable by AI engines.
Both goals are earned by the same underlying property: a page that answers a specific question with verifiable, extractable claims. Work through the steps in order; the page is done when every completion criterion checks.
This skill is used in conjunction with the content-write-blog skill in this repo: content-write-blog produces and drafts the post (author, frontmatter shape, link rules, writing quality), and this skill optimizes the result for search and AI engines. content-write-blog stays the source of truth for drafting conventions; this skill does not restate them.
Write down the questions this page should be the answer to: one primary query and the 5–10 related queries an AI engine fans out to (synonyms, "how to", "X vs Y", "best X for Y" variants). Every later step is judged against this list.
For new pages, let the query pick the format: comparisons, definitive guides, and original data are the formats AI engines cite most, so frame the page as one of those where the topic allows, rather than a generic post on the same subject.
Done when: the primary query is one sentence, and each fan-out query is either answered on this page or deliberately assigned to another page.
The first paragraph answers the primary query directly: what the thing is, what the reader will achieve, and the exact mechanism, with the product and category named. A reader (or model) who sees only this paragraph should correctly classify the page and be able to quote a correct answer from it.
Series or context position is stated explicitly ("This is the second part of a five-part series on...") — models can't infer position from URL structure.
The lead carries the canonical internal links, so agents know from the first paragraph where the related information lives: the first product mention linked to its docs page (per content-write-blog link rules) and, where one exists, the predecessor or parent page (previous series part, overview page). Only those; "related reading" clusters dilute the answer and stay out of the lead.
Done when: the primary query is answered within the first 100 words, with no throat-clearing ("Welcome to", "In today's world", "Here's the thing"), and the lead links to the canonical docs page and predecessor page where they exist.
AI engines extract passages, not pages. Match block type to query type:
| Query shape | Block |
|---|---|
| "What is X?" | Definition paragraph, 40–60 words, standalone |
| "How to X" | Numbered steps |
| "X vs Y" | Comparison table |
| "Is X better / should I X" | Pros/cons list |
| Recurring questions | FAQ section (markup below) |
Rules:
whitelist: true reject unknown fields?"), where that reads naturally.InlineTOC from headings.## Frequently asked questions
<Accordions type="single">
<Accordion title="Question phrased the way people ask it?">
Answer as a standalone, quotable claim. State the fact first, qualification second.
</Accordion>
</Accordions>
3–4 questions per page. Each answer must stand alone with zero surrounding context.
Done when: each target query from Step 1 maps to a block on the page, and every FAQ answer reads as a complete fact on its own.
Models cite pages that contain facts they can lift and defend. Convert vague statements into specific ones:
Unique constraint failed"), quoted from real output.Done when: every factual claim on the page would survive being quoted out of context, and each has been verified this pass (not assumed from a previous version).
updatedAt frontmatter bumped honestly per touch, plus an "Updated (Month Year):" callout stating what changed and which versions everything was verified against.content-write-blog link rules.Done when: the page names its category, carries a current updatedAt + callout, and links to at least the canonical docs page for each product it covers.
metaTitle: leads with the primary query's answer or subject, under ~60 characters, current version names included where they earn clicks ("Input Validation in a REST API with NestJS and Prisma 7").metaDescription: one or two sentences answering the primary query, naming the stack and the outcome, under ~160 characters.Done when: title and description each answer the primary query on their own, and the slug is untouched.
Build or serve the page and check the rendered HTML, not the source file: FAQ bodies present in HTML, headings generating TOC entries, no broken components, links returning 200. Content checks against the source file pass on stale builds and lie.
Done when: every check in this list was run against the served page:
updatedAt + Updated callout present (refreshes)Take prisma/content-seo-geo from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.