--- name: seo-llmo description: 'Use 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 (including SoftwareApplication and Product types), robots.txt (including the Content-Signal directive), sitemap.xml, llms.txt (including agent instruction block and MCP declaration), AI crawler access (GPTBot, ClaudeBot, PerplexityBot), Markdown content negotiation for agents, Link response headers, Agent Skills index, A2A Agent Card, MCP server discovery, agent.json, pricing.md, and the "explicit absence beats silence" principle for agent-facing files. Trigger for marketing sites, landing pages, blogs, docs, and e-commerce stores; before any "launch" or "go live"; during pre-launch checklists; when the user mentions isitagentready.com, ora.run, agent-readiness, A2A, MCP discovery, Cloudflare Markdown for Agents, or wants AI agents (ChatGPT deep research, Claude, Perplexity, browser agents) to use their site; and when scaffolding a new public site, even if the user does not explicitly mention SEO. Skip for internal tools, admin panels, or auth-gated dashboards with no public surface.' --- # 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](https://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 1. [Structured Data (JSON-LD)](#structured-data-json-ld) 2. [llms.txt and llms-full.txt](#llmstxt-and-llms-fulltxt) 3. [robots.txt for AI and Search Crawlers](#robotstxt-for-ai-and-search-crawlers) 4. [Sitemap](#sitemap) 5. [Meta Tags and Social Sharing](#meta-tags-and-social-sharing) 6. [Agent-Readiness](#agent-readiness) 7. [Core Web Vitals](#core-web-vitals) 8. [SPA Considerations](#spa-considerations) 9. [Static Hosting Notes](#static-hosting-notes) 10. [Validation](#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 ``: ```html ``` **CSP interaction:** If your site uses a strict `Content-Security-Policy` with `script-src`, inline `

Your Site Name

What you do in one paragraph.

Key resources

``` For a static site, this is simplest to implement as a CloudFront Function or Netlify/Vercel edge function that redirects `?mode=agent` to a pre-built `/agent.html`. ### What's out of scope for this guide isitagentready.com and ORA also check OAuth discovery, OAuth Protected Resource Metadata (RFC 9728), WebMCP, and agentic commerce protocols (x402, UCP, ACP). These require active server infrastructure and only apply to sites that expose **authenticated programmatic actions** - booking, purchasing, querying user-specific data via OAuth. If you're building that, see: - [webmcp.org](https://webmcp.org/) for exposing MCP capabilities from a browser context - [RFC 9728](https://datatracker.ietf.org/doc/html/rfc9728) for OAuth Protected Resource Metadata - [x402.org](https://www.x402.org/), [ucp.dev](https://ucp.dev/), [agenticcommerce.dev](https://agenticcommerce.dev) for agent payments MCP server authoring and A2A Agent Card are covered above - even without implementing them, every site should declare their status explicitly. Verify: scan at [isitagentready.com](https://isitagentready.com/) (aim for level 4+) and [ora.run](https://ora.run/) (aim for grade B or above). Both are free. --- ## Core Web Vitals Applies when: site targets Google search ranking, or is a SPA. Core Web Vitals are Google ranking signals measured in the field (real user data via Chrome). The three metrics as of 2026: - **LCP (Largest Contentful Paint):** Time until the largest visible content element loads. Target: under 2.5 seconds. Common causes of poor LCP: large unoptimized hero images, render-blocking resources, slow server response. - **CLS (Cumulative Layout Shift):** Visual instability from elements moving after initial render. Target: under 0.1. Common causes: images without explicit `width`/`height`, ads injecting content, late-loading fonts. - **INP (Interaction to Next Paint):** Replaced FID (First Input Delay) in March 2024. Measures the latency of all user interactions throughout the page visit, not just the first. Target: under 200 ms. Common causes in SPAs: heavy JavaScript on the main thread, large React re-renders on input events. INP is the most impactful change for SPA developers - FID only measured the first interaction, making it easy to pass while the app remained sluggish. INP catches ongoing interaction delays. ### LCP quick wins **Image format and sizing:** Convert images to AVIF (supported in Chrome 85+, Firefox 93+, Safari 16+). AVIF consistently achieves 90-95% size reduction over JPEG for photographic content at equivalent visual quality. On macOS: `sips -s format avif input.jpg --out output.avif`. Cross-platform: `squoosh`, `sharp`, or `cwebp` for WebP. Serve images at 2x the display size, not the original upload resolution. A 5000px image used as a decorative background is visually identical to a 1920px version at a fraction of the weight. Use `sips -Z 1920 input.jpg` to resize before converting. For CSS `background-image` (inline styles or Tailwind `bg-*`), there is no `` element available for format negotiation, so use AVIF directly. Browser support for modern audiences is effectively universal. **Font loading:** If using Google Fonts, load them from `index.html` with preconnect hints, not via `@import` inside component CSS or inline `