$npx -y skills add ziniman/ai-instruct --skill seo-llmoUse this skill whenever the user is building, reviewing, or preparing to launch any public-facing website or web app. SEO, LLMO, and agent-readiness are baseline requirements for every public site, not optional add-ons. Covers meta tags, Open Graph, JSON-LD structured data (inclu
| 1 | # SEO & LLMO Implementation Guide |
| 2 | |
| 3 | > Applies to: Any website or web app | Updated: April 2026 |
| 4 | |
| 5 | 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. |
| 6 | |
| 7 | 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](https://isitagentready.com/). |
| 8 | |
| 9 | --- |
| 10 | |
| 11 | ## Section 0: Before You Start |
| 12 | |
| 13 | Answer these questions before generating any code. Each has a default - use it if the user hasn't said otherwise. |
| 14 | |
| 15 | **Q: What kind of site is this?** |
| 16 | (blog, online shop, company/marketing site, web app, documentation) |
| 17 | Default: company/marketing site - drives which schema types to prioritize. |
| 18 | |
| 19 | **Q: How is the site built?** |
| 20 | (plain HTML, React/Vue/Angular SPA, Next.js/Astro/Nuxt with server rendering, WordPress/CMS) |
| 21 | 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. |
| 22 | |
| 23 | **Q: Where are your visitors?** |
| 24 | (one country, multiple countries/languages, worldwide) |
| 25 | Default: worldwide, single language - skip hreflang unless multiple languages are confirmed. |
| 26 | |
| 27 | **Q: What's your main goal with SEO?** |
| 28 | (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) |
| 29 | Default: all of the above - the baseline checklist covers Google + AI chat citation + agent-readiness in one pass. |
| 30 | |
| 31 | **Q: Do you already have a robots.txt, sitemap, or structured data set up?** |
| 32 | Default: no - but check for existing files before creating new ones, and merge rather than overwrite. |
| 33 | |
| 34 | > **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. |
| 35 | |
| 36 | --- |
| 37 | |
| 38 | ## Contents |
| 39 | |
| 40 | 1. [Structured Data (JSON-LD)](#structured-data-json-ld) |
| 41 | 2. [llms.txt and llms-full.txt](#llmstxt-and-llms-fulltxt) |
| 42 | 3. [robots.txt for AI and Search Crawlers](#robotstxt-for-ai-and-search-crawlers) |
| 43 | 4. [Sitemap](#sitemap) |
| 44 | 5. [Meta Tags and Social Sharing](#meta-tags-and-social-sharing) |
| 45 | 6. [Agent-Readiness](#agent-readiness) |
| 46 | 7. [Core Web Vitals](#core-web-vitals) |
| 47 | 8. [SPA Considerations](#spa-considerations) |
| 48 | 9. [Static Hosting Notes](#static-hosting-notes) |
| 49 | 10. [Validation](#validation) |
| 50 | |
| 51 | --- |
| 52 | |
| 53 | ## Structured Data (JSON-LD) |
| 54 | |
| 55 | Applies when: any site where you want Google rich results or AI citation. |
| 56 | |
| 57 | JSON-LD (JavaScript Object Notation for Linked Data) is the highest-impact addition for both SEO and LLMO. Add it in `<head>`: |
| 58 | |
| 59 | ```html |
| 60 | <script type="application/ld+json"> |
| 61 | { |
| 62 | "@context": "https://schema.org", |
| 63 | "@graph": [ ... ] |
| 64 | } |
| 65 | </script> |
| 66 | ``` |
| 67 | |
| 68 | **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. |
| 69 | |
| 70 | ### @graph with @id cross-referencing |
| 71 | |
| 72 | 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: |