When the user wants to create, audit, or optimize sitemap.xml. Also use when the user mentions "sitemap," "sitemap.xml," "sitemap index," "lastmod," "changefreq," "priority," "URL discovery," "URL discovery for search engines," "single source of truth," "URL config," "unify sitemap IndexNow," or "reduce duplicate maintenance." For IndexNow, use indexnow.
npx skills add https://github.com/kostja94/marketing-skills --skill xml-sitemap
Guides sitemap creation, auditing, and optimization for search engine discovery.
When invoking: On first use, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On subsequent use or when the user asks to skip, go directly to the main output.
Generate an XML Sitemap that complies with the sitemaps.org protocol from the project's page list, and declare it in robots.txt.
Check for project context first: If .claude/project-context.md or .cursor/project-context.md exists, read it for site URL and page structure.
Identify:
https://example.com)Before generating, assess whether a sitemap is warranted. A sitemap is most valuable when:
Small sites (< 50 pages) with strong internal linking may not strictly need one, but creating a sitemap has near-zero cost and provides future-proof infrastructure. If in doubt, err on the side of creating.
| Item | Spec |
|------|------|
| Single sitemap limit | 50,000 URLs, 50MB (uncompressed) |
| Sitemap index | When exceeding limit, split and have main index reference sub-sitemaps |
| Encoding | UTF-8 |
| URL format | Full URL, same host, include https:// |
| Required tags | <loc> |
| Optional tags | <lastmod>, <changefreq>, <priority> |
| Field | Description | Recommendation |
|-------|--------------|---------------|
| url | Full URL | https://example.com/path |
| lastModified | Page last modified time | Use page metadata, ISO 8601; use YYYY-MM-DD or omit when no data |
| changeFrequency | Update frequency | Home daily, list pages weekly, content pages monthly |
| priority | Relative importance | Home 1.0, aggregate pages 0.9, content pages 0.7–0.8, others 0.5–0.6 |
YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS+TZD), e.g. 2025-01-15, 2025-01-15T14:30:00+08:00.new Date() for lastmod—causes all URLs to share the same timestamp; search engines may ignore.always, hourly, daily, weekly, monthly, yearly, never./sitemap.xml directly./sitemap/posts.xml, /sitemap/pages.xml, /sitemap/zh.xml, /sitemap/en.xml./sitemap.xml or /sitemap-index.xml, each entry as <sitemap><loc>...</loc></sitemap>./sitemap/zh.xml, /sitemap/en.xml./sitemap/zh-posts.xml, /sitemap/en-posts.xml.For multilingual sites, add xhtml:link hreflang alternates inside each <url> entry. Recommended for large sites (100+ multilingual pages); centralizes hreflang management.
Rules:
x-default pointing to default locale.xmlns:xhtml="http://www.w3.org/1999/xhtml" namespace.<loc> typically uses default-locale (clean) URL; x-default points there too.<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com/page</loc>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/page" />
<xhtml:link rel="alternate" hreflang="zh" href="https://example.com/zh/page" />
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" />
</url>
</urlset>
List all language sitemaps in sitemap index; include in robots.txt.
| Tech Stack | Implementation |
|------------|-----------------|
| Next.js App Router | app/sitemap.ts export MetadataRoute.Sitemap or generateSitemaps |
| Next.js Pages Router | pages/sitemap.xml.ts or getServerSideProps return XML |
| Astro | src/pages/sitemap-index.xml.ts or @astrojs/sitemap |
| Vite / Static build | Build script generates public/sitemap.xml |
| Other | Generate static /sitemap.xml or return dynamically via API |
'/((?!api|_next|sitemap|sitemap-index|.*\\..*).*)'.//zh, /en)/api/*, /admin/*, /_next/*Create a config (e.g., site-pages-config.ts) that exports:
modifiedDate per page for accurate lastmodgetAllPageUrls(baseUrl) for sitemap and IndexNowWhy: Sitemap, IndexNow, and feed can all import from the same config—no duplicate URL maintenance. IndexNow should use the same URL list; avoid separate hardcoded lists.
Add to robots.txt:
Sitemap: https://example.com/sitemap.xml
With multiple sitemaps, only declare the main index.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2025-01-15</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/page</loc>
<lastmod>2025-01-10</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap/pages.xml</loc>
<lastmod>2025-01-15</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap/posts.xml</loc>
<lastmod>2025-01-14</lastmod>
</sitemap>
</sitemapindex>
After generating the sitemap, guide the user through submission:
Sitemap: https://example.com/sitemap.xml (or the index URL)Common submission errors to flag:
When /sitemap.xml returns HTTP 200 but Content-Type: text/html with homepage content, Google silently rejects the sitemap — no GSC alert because the status code is 200. This is worse than 404.
Common causes:
pages/[...slug].vue, Next.js catch-all) intercepting before the sitemap handlerDiagnose with:
curl -I https://example.com/sitemap.xml # Check Content-Type
curl -A "Googlebot" -I https://example.com/sitemap.xml # Googlebot's view
curl -s https://example.com/sitemap.xml | head -5 # First lines must be XML
Fix (Next.js): Use server/routes/sitemap.xml.ts (highest priority, bypasses catch-all). For i18n, add excludePatterns: [/^\/sitemap.*\.xml$/]. Renaming the sitemap file (e.g., to sitemap_index.xml) can bypass Google's cache of the failed state.
| Issue | Cause / Fix |
|-------|-------------|
| Sitemap 404 | Build failure, wrong path, incorrect export; check routes and deployment |
| Missing pages | URLs not in data source, filtered or excluded |
| lastmod anomaly | Avoid new Date(); use modifiedDate from page metadata |
| Google not indexing | Submit sitemap in GSC; check Coverage (google-search-console) and robots |
| EN/ZH URL mismatch | Use unified data source; share same list when generating by locale |
| Sitemap returns HTML | Catch-all route or i18n intercepting before sitemap handler; diagnose with curl -I + Googlebot UA; see §10 |
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take kostja94/xml-sitemap from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.