Step 1: Confirm the machines can actually read you
Before any content work, verify what a non-JavaScript client sees:
curl -A "GPTBot" -s https://example.com/your-page | grep -c "your key sentence"
If that returns 0, your content is invisible to most AI retrieval. Server-side render, pre-render, or statically generate the routes that matter. This single failure explains the majority of "we publish constantly and never get cited" cases.
Step 2: Set a deliberate robots.txt policy
Decide per bot, then write it explicitly rather than leaving it to a default:
User-agent: GPTBot
Allow: /
User-agent: OAI-SearchBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Google-Extended
Allow: /
Check your CDN or WAF too. Cloudflare's bot-fighting and "block AI scrapers" toggles silently override robots.txt intent, and many sites are blocked at the edge without realising it. Confirm in your CDN logs that these agents receive 200 responses, not 403s.
Step 3: Make your entity unambiguous
Models attribute citations to entities, not just URLs. Publish a single, stable entity graph:
- One
PersonorOrganizationnode with a permanent@id, reused across every page. sameAspointing at the profiles you actually control and keep current.- An author byline on every article that resolves to that same node.
- Identical name, address and contact details across the site, your profiles and any directories.
Contradictory entity data is a citation killer: when a model cannot tell who is speaking, it prefers a source where it can.
Step 4: Write passages that survive extraction
Each section should be liftable. That means:
- A heading phrased the way a person asks the question.
- A 40–60 word direct answer immediately beneath it.
- Then the detail, caveats and worked example.
- No pronouns pointing at previous sections — write each block so it stands alone.
Step 5: Add the things models can verify
Generative systems favour content with checkable specificity: version numbers, thresholds, commands, configuration snippets, before-and-after measurements, named tools and dated observations. Marketing adjectives are unverifiable and get skipped. Replace "significantly faster" with "TTFB from 820ms to 190ms after enabling object caching and PHP-FPM tuning".
Step 6: Corroborate across a cluster
A single article is a claim; an interlinked cluster is a body of work. Build hub-and-spoke sets: a comprehensive pillar page, six to ten focused articles answering adjacent questions, and reciprocal contextual links between them. Corroboration across your own domain plus consistent mentions elsewhere is what moves you from "a result" to "the source".
Step 7: Keep content genuinely current
Set dateModified only when you have actually revised substance. Faking freshness is detectable and pointless. Real, dated updates on evergreen technical pages are one of the strongest citation signals available to a small site.
Step 8: Measure it properly
- Referral hosts: track sessions from chat.openai.com, perplexity.ai, copilot.microsoft.com and claude.ai.
- Server logs: monitor request volume per AI user agent; a sudden drop usually means an edge rule, not a policy change.
- Prompt panel: keep a fixed list of 20–30 target questions and test them monthly across assistants, recording whether you are cited, mentioned or absent.
What does not work
Stuffing "as an AI language model" bait, hidden text aimed at crawlers, mass-generated question pages with no substance, and FAQ schema on questions not visible on the page. These either do nothing or actively damage trust signals. The path to citation is unglamorous: be readable by machines, be specific, be consistent about who you are.