SEO & LLMO Implementation Guide
Applies to: Any website or web app | Updated: April 2026
A practical guide for implementing Search Engine Optimization (SEO), Large Language Model Optimization (LLMO), and agent-readiness - making your site discoverable and usable by search engines, AI chat tools, and autonomous agents.
Agents (ChatGPT deep research, Claude with web, Perplexity, Cloudflare Agents, browser agents) don't just index your page, they fetch and act on it. That raises the bar on three things beyond classic SEO: telling crawlers what they may do with your content (Content Signals), serving a clean Markdown version on demand, and advertising any programmatic entry points you expose. You can check your agent-readiness score at isitagentready.com.
Section 0: Before You Start
Answer these questions before generating any code. Each has a default - use it if the user hasn't said otherwise.
Q: What kind of site is this? (blog, online shop, company/marketing site, web app, documentation) Default: company/marketing site - drives which schema types to prioritize.
Q: How is the site built?
(plain HTML, React/Vue/Angular SPA, Next.js/Astro/Nuxt with server rendering, WordPress/CMS)
Default: if a framework config file (e.g. vite.config.*, next.config.*, astro.config.*) is visible in the project, detect from that; otherwise assume plain HTML.
Q: Where are your visitors? (one country, multiple countries/languages, worldwide) Default: worldwide, single language - skip hreflang unless multiple languages are confirmed.
Q: What's your main goal with SEO? (show up in Google search, get cited by AI chat tools like ChatGPT/Perplexity, be usable by autonomous agents, social sharing, all of the above) Default: all of the above - the baseline checklist covers Google + AI chat citation + agent-readiness in one pass.
Q: Do you already have a robots.txt, sitemap, or structured data set up? Default: no - but check for existing files before creating new ones, and merge rather than overwrite.
AI assistant: Read the user's answers (or use the defaults above) before generating any code. Skip sections that don't apply to their setup.
Contents
- Structured Data (JSON-LD)
- llms.txt and llms-full.txt
- robots.txt for AI and Search Crawlers
- Sitemap
- Meta Tags and Social Sharing
- Agent-Readiness
- Core Web Vitals
- SPA Considerations
- Static Hosting Notes
- Validation
Structured Data (JSON-LD)
Applies when: any site where you want Google rich results or AI citation.
JSON-LD (JavaScript Object Notation for Linked Data) is the highest-impact addition for both SEO and LLMO. Add it in <head>:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [ ... ]
}
</script>
CSP interaction: If your site uses a strict Content-Security-Policy with script-src, inline <script type="application/ld+json"> blocks are treated as inline scripts and will be blocked unless you add 'unsafe-inline' or a per-request nonce. Add the nonce to the JSON-LD script tag the same way you would for any other inline script.
@graph with @id cross-referencing
Use @graph to put multiple schema objects in one block and wire them together with @id references. This lets Google and AI parsers understand the relationships between entities on your site:
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://yourdomain.com/#org",
"name": "Your Company Name",
"url": "https://yourdomain.com",
"logo": "https://yourdomain.com/logo.svg",
"description": "What you do, in one sentence.",
"email": "contact@yourdomain.com",
"sameAs": [
"https://linkedin.com/company/your-company",
"https://x.com/yourhandle",
"https://github.com/your-org",
"https://www.wikidata.org/wiki/Q123456",
"https://en.wikipedia.org/wiki/Your_Company"
],
"contactPoint": {
"@type": "ContactPoint",
"email": "contact@yourdomain.com",
"contactType": "customer support"
},
"address": {
"@type": "PostalAddress",
"addressCountry": "US"
}
},
{
"@type": "WebSite",
"@id": "https://yourdomain.com/#website",
"url": "https://yourdomain.com",
"name": "Your Site Name",
"publisher": { "@id": "https://yourdomain.com/#org" }
}
]
}
The "publisher": { "@id": "..." } pattern replaces duplicating the full Organization object everywhere. Use the same #id fragment consistently across all pages.
FAQPage schema
Use on any page with a Q&A section. FAQPage triggers Google rich results (expandable Q&A in search) and is a reliable citation target for AI tools that answer direct questions:
{
"@type": "FAQPage",
"@id": "https://yourdomain.com/faq#faqpage",
"mainEntity": [
{
"@type": "Question",
"name": "What does your product do?",
"acceptedAnswer": {
"@type": "Answer",
"text": "A specific, self-contained answer that makes sense without surrounding context."
}
}
]
}
Write answers that make sense in isolation - AI tools extract and quote them without the surrounding page.
Service and Article schema
For service pages:
{
"@type": "Service",
"@id": "https://yourdomain.com/services/your-service#service",
"name": "Service Name",
"description": "What this service provides.",
"provider": { "@id": "https://yourdomain.com/#org" }
}
For blog posts or articles:
{
"@type": "Article",
"@id": "https://yourdomain.com/blog/post-slug#article",
"headline": "Article Title",
"datePublished": "2026-01-15",
"dateModified": "2026-02-01",
"author": { "@id": "https://yourdomain.com/#org" },
"publisher": { "@id": "https://yourdomain.com/#org" }
}
Product schema
Applies when: site type is online shop.
Product schema is the highest-impact schema type for e-commerce. It surfaces pricing, availability, and ratings directly in Google Shopping results and is a primary signal AI tools use when answering product queries. Add one block per product page:
{
"@type": "Product",
"@id": "https://yourdomain.com/products/product-slug#product",
"name": "Product Name",
"description": "What this product is and what problem it solves. Write for someone who has never seen your site.",
"image": [
"https://yourdomain.com/images/product-front.jpg",
"https://yourdomain.com/images/product-side.jpg"
],
"brand": {
"@type": "Brand",
"name": "Your Brand"
},
"offers": {
"@type": "Offer",
"url": "https://yourdomain.com/products/product-slug",
"priceCurrency": "USD",
"price": "49.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "128"
}
}
Key fields for AI visibility: description (write it to stand alone, without surrounding page context), offers.availability (keep it accurate and current - AI tools actively surface in-stock status), and aggregateRating (AI shopping results weight social proof heavily).
If the product has variants (sizes, colors), add a hasVariant array or use variesBy - see schema.org/Product for the full spec.
SoftwareApplication schema
Applies when: site type is a web app, SaaS product, or developer tool.
SoftwareApplication is the right schema type when your product IS the software - as opposed to Product for