--- name: static-seo description: > Audits and improves SEO for static HTML sites. Use when the user asks to audit, set up, or improve SEO on a static site (Hugo, Jekyll, 11ty, Gatsby, Next.js static export, hand-rolled HTML, or `wp-static-clone` output), or mentions head metadata, structured data, JSON-LD, sitemaps, IndexNow, Open Graph images, schema endpoints, NLWeb, hreflang, or search engine indexing for a static site. For Astro projects, use `astro-seo` instead — its recipes produce less hand-rolled boilerplate by routing through `@jdevalk/astro-seo-graph`. --- # Static SEO Audits and improves the SEO setup of a static HTML site against nine categories — head metadata, structured data, content quality, Open Graph images, sitemaps and indexing, agent discovery, performance, redirects, and CI validation. Recipes are platform-neutral: raw `` tags, raw JSON-LD, hand-rolled `sitemap.xml`, generic CI tooling. Audit framework parallels [`astro-seo`](../astro-seo/) but without the `@jdevalk/astro-seo-graph` spine. **Code recipes live in `AGENTS.md`** — read it when you need to implement a specific fix. This file has the workflow and audit checklist. ## Workflow 1. **Detect the project** — confirm this is a static site, identify the build tool, find where to apply changes. 2. **Audit** — score nine categories and produce actionable findings. 3. **Improve** — generate or modify files to close the gaps. Recipes are in `AGENTS.md`. 4. **Metadata pass** — invoke `metadata-check` on every short string the skill generated (titles, descriptions, schema `description` fields, FAQ answers). 5. **Verify** — run any build, validate the output, remind the user about non-file tasks (Search Console, Bing Webmaster Tools, IndexNow key submission). --- ## Phase 0: Detect the project Confirm the basics before auditing: - **It is actually a static site.** Look for built HTML — `index.html` at the repo root, or under `_site/` (Jekyll), `public/` (Hugo / 11ty / Gatsby), `dist/` (Vite / Astro static), `out/` (Next.js with `output: export`). If everything is server-rendered (Express, PHP, dynamic routes), this is the wrong skill — point at `astro-seo` for Astro, `wp-readme-optimizer` for WP plugin pages, or recommend a generic SEO audit instead. - **Source build tool.** Drives where to apply head metadata changes: - `_config.yml` / `_layouts/` → Jekyll - `config.toml` / `config.yaml` / `themes/` → Hugo - `.eleventy.js` / `_includes/` → 11ty - `gatsby-config.js` / `src/components/SEO.*` → Gatsby - `next.config.js` with `output: 'export'` and `pages/_document.tsx` → Next.js static export - `astro.config.mjs` → Astro (in which case **use `astro-seo` instead**) - No build config, just HTML files → hand-rolled or scraped (e.g. `wp-static-clone` output). Edit the HTML directly or use a post-process script. - **Canonical site URL.** Search the repo for the production origin — typically in `_config.yml`, `config.toml`, `astro.config`, or hardcoded into a layout. **If it's missing, empty, or `localhost`, flag as a blocking issue before anything else.** Canonicals, sitemaps, OG image URLs, and JSON-LD `@id` values all derive from this. - **Deployment target.** Read `vercel.json`, `netlify.toml`, `wrangler.toml`, or `public/_headers` to determine the host. Drives redirect and header syntax in Phase 2. - **Is the site multilingual?** Check for locale subdirectories (`/en/`, `/nl/`, `/de/`) or build-tool i18n config. If yes, hreflang matters; if no, skip it. - **What's already in `
`?** Open one built HTML file and inventory: title, description, canonical, robots, Open Graph, Twitter cards, JSON-LD, hreflang. The audit in Phase 1 is faster if you can reference what's there. Ask only what you can't detect. --- ## Phase 1: Audit Score each category out of 10. For each, give 2–4 specific findings that quote the actual HTML, config, or template. Within each category, checks are tiered: - **Must** — ship blockers. A failure causes visible SEO regression. - **Should** — standard practice. Skipping costs reach. - **Nice** — forward-looking or situational. Useful but not baseline for every site. Skip **Nice** checks for small personal sites unless the user asks for the full treatment. ### 1. Head metadata (/10) - **Must** — every page has a `