seo-bootstrap — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-bootstrap (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Most solo founders ship a marketing site without a sitemap, without robots.txt, with no Open Graph image, and zero structured data. Google can crawl the site but doesn't know what it is. AI search engines (ChatGPT, Perplexity, Google AI Overviews) skip it entirely because there's nothing structured to cite [1][2].
This skill ships the four files that move a site from "invisible" to "indexable" in one commit: sitemap.xml, robots.txt, a default 1200×630 OG image, and Organization + WebSite JSON-LD in the root layout.
Activation moment: "It opened a PR that fixed sitemap, robots, and schema in one commit."
site:domain.com but no rich result, no favicon in SERP, no OG card on Twitter/iMessageDon't use for: sites that already have all four pieces (run auditing-technical-seo instead), or staging environments that should stay noindex.
Read package.json and check folder structure:
| Signal | Framework |
|---|---|
"next" in deps + app/ folder | Next.js App Router (default 2026 path) |
"next" in deps + pages/ folder only | Next.js Pages Router |
"astro" in deps | Astro |
"@sveltejs/kit" in deps | SvelteKit |
"react-router-dom" only | Vite + RR — fall back to static public/ files |
Also note: "site" field in astro.config.*, kit.paths in svelte.config.js, metadataBase in next.config.*. You need the canonical site URL for every template — if missing, ask the user once before generating.
Check for each of these. Report present vs missing as a table before writing anything:
| Asset | Next.js (App) | Astro | SvelteKit |
|---|---|---|---|
| Sitemap | app/sitemap.ts or app/sitemap.xml | @astrojs/sitemap in config or src/pages/sitemap.xml.ts | src/routes/sitemap.xml/+server.ts |
| Robots | app/robots.ts or public/robots.txt | public/robots.txt | static/robots.txt |
| OG image | app/opengraph-image.{tsx,png} | public/og.png | static/og.png |
| JSON-LD | <script type="application/ld+json"> in root layout | same in Layout.astro | same in +layout.svelte |
<title> + meta description | metadata export or <Head> | frontmatter or layout | <svelte:head> |
Also confirm metadataBase (Next), site (Astro), or canonical URL (SvelteKit) is set. Without it, sitemap URLs will be relative and Google will reject the file.
Use the framework templates in templates/{nextjs,astro,sveltekit}/. Rules:
@astrojs/sitemap to astro.config.* and run npm install. For SvelteKit, the +server.ts is auto-routed.Article/Product schema is the next skill's job.feat(seo): bootstrap sitemap, robots, OG, and JSON-LD. Then open one PR.After deploy (or npm run build && npm run preview):
curl -sI https://site.com/sitemap.xml | head -1 # expect 200
curl -s https://site.com/robots.txt # expect Sitemap: line
curl -sI https://site.com/og.png # expect 200, < 1MBThen:
Organization + WebSite parse with zero errors./admin, /api, draft slugs). Filter explicitly in the generator./api/ and /admin/.next/og ImageResponse template stays well under.noindex after generation./about instead of https://site.com/about — Google rejects.| File | What it does | Why for Google | Why for AI search (GEO) |
|---|---|---|---|
sitemap.xml | Lists every indexable URL + lastmod | Faster, more complete crawl | LLM crawlers (GPTBot, PerplexityBot) use it the same way |
robots.txt | Crawler rules + sitemap pointer | Avoid wasted crawl budget on /api/ | Tells AI crawlers where the sitemap lives |
| OG image | Social card preview | Indirect (CTR signal from social) | LLMs surface the image in answers when present |
JSON-LD Organization + WebSite | Knowledge-graph entity, sitelinks search box | Eligible for rich results | LLMs cite structured entities ~2× more than unstructured text |
After bootstrap merges:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.