Hreflang and International SEO
AgriciDaniel/claude-seo
Audits, validates and generates hreflang tags for multi-language and multi-region sites in HTML, HTTP headers or XML sitemaps, flagging common code and return-tag mistakes.
When the user wants to create, audit, or optimize sitemap.xml.
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kostja94/marketing-skills xml-sitemap --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/seo/technical/sitemap .claude/skills/xml-sitemap && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .claude/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemapType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kostja94/marketing-skills xml-sitemap --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/seo/technical/sitemap .agents/skills/xml-sitemap && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .agents/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kostja94/marketing-skills xml-sitemap --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/seo/technical/sitemap .cursor/skills/xml-sitemap && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .cursor/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kostja94/marketing-skills.git --path skills/seo/technical/sitemap--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kostja94/marketing-skills xml-sitemap --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/seo/technical/sitemap .gemini/skills/xml-sitemap && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .gemini/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kostja94/marketing-skills xml-sitemapInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/seo/technical/sitemap .github/skills/xml-sitemap && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .github/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kostja94/marketing-skills --skill xml-sitemap -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kostja94/marketing-skills xml-sitemap --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kostja94/marketing-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/seo/technical/sitemap .opencode/skills/xml-sitemap && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "xml-sitemap" agent skill from https://github.com/kostja94/marketing-skills/tree/main/skills/seo/technical/sitemap into .opencode/skills/xml-sitemap/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "xml-sitemap", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
xml-sitemapWhen the user wants to create, audit, or optimize sitemap.xml.
XML Sitemap is an agent skill from kostja94/marketing-skills. 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.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Marketing & SEO, covering Technical SEO. The repository describes itself as: Agent Skills for Marketing — SEO, Social, Influencer & More. 160+ open-source skills for SEO, content, 40+ page types, paid ads, channels, and strategies. Add project context… The licence is MIT.
11 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8dd89c5. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
sitemaps.orgw3.orgAlso links to:
developers.google.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
XML Sitemap loads about 2.9k tokens when it runs. Until then it costs about 92 tokens; SKILL.md has 1,164 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kostja94/marketing-skills at commit 8dd89c5, republished under its MIT licence (© kostja94). 1,164 words, ~2,914 tokens.
.claude/skills/xml-sitemap/SKILL.md (or your agent's skills folder).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.
Project context: Read root contextus.md when present and load only the modules relevant to this task. Without Contextus, use available project material or user-provided facts and ask for missing information; do not create a parallel context system.
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.xmlWith 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 XMLFix (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 |
© kostja94, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/seo/technical/sitemap of kostja94/marketing-skills.
Open the folder on GitHubat commit 8dd89c5
XML Sitemap next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| XML Sitemap this skillkostja94/marketing-skills | 1k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Hreflang and International SEOAgriciDaniel/claude-seo | 19k | 5 repos | ~3.4k | Automated safety check: Pass | MIT | |
| Google SEO APIsAgriciDaniel/claude-seo | 19k | 1 repos | ~4.2k | Automated safety check: Pass | MIT | |
| GEO-First SEO Audit Toolzubair-trabzada/geo-seo-claude | 11k | — | ~2.8k | Automated safety check: Notes | MIT | |
| SEO Optimizerailabs-393/ai-labs-claude-skills | 454 | 1 repos | ~3.2k | Automated safety check: Pass | MIT | |
| SEO Drift MonitorAgriciDaniel/claude-seo | 19k | 1 repos | ~1.9k | Automated safety check: Pass | MIT |
AgriciDaniel/claude-seo
Audits, validates and generates hreflang tags for multi-language and multi-region sites in HTML, HTTP headers or XML sitemaps, flagging common code and return-tag mistakes.
AgriciDaniel/claude-seo
Pulls real Google data for SEO work: Search Console, PageSpeed Insights, CrUX field data, the Indexing API and GA4 organic traffic, through /seo google commands.
zubair-trabzada/geo-seo-claude
Audits a website for AI search visibility across ChatGPT, Claude, Perplexity and Google AI Overviews while checking traditional SEO, schema and E-E-A-T content quality.
ailabs-393/ai-labs-claude-skills
This skill should be used when analyzing HTML/CSS websites for SEO optimization, fixing SEO issues, generating SEO reports, or implementing SEO best practices.
AgriciDaniel/claude-seo
Captures baselines of a page's SEO-critical elements, compares later snapshots against them and flags regressions by severity, like version control for on-page SEO.
zubair-trabzada/geo-seo-claude
Validates an existing llms.txt file or crawls a site to generate a new one, following the format rules for a root-level Markdown file aimed at AI systems.
kostja94/marketing-skills
When the user wants to add recommendations, links, or content to Grokipedia.
kostja94/marketing-skills
When the user wants to track AI search traffic in GA4 or GSC.
kostja94/marketing-skills
When the user wants to set up, audit, or optimize analytics tracking (GA4, events, conversions).
kostja94/marketing-skills
When the user wants to define, audit, or apply visual identity (typography, colors, spacing, design tokens, frontend aesthetics).
kostja94/marketing-skills
When the user wants to configure canonical URLs, fix duplicate content, or consolidate URL signals.
kostja94/marketing-skills
When the user wants to plan content for SEO, create content calendar, or build topic clusters.
Categories
When the user wants to create, audit, or optimize sitemap.xml. XML Sitemap is an agent skill from kostja94/marketing-skills.xml.
XML Sitemap fits situations like: wants to create; optimize sitemap.xml; the user mentions sitemap; URL discovery for search engines.
Run `npx skills add kostja94/marketing-skills --skill xml-sitemap -a claude-code`. Or copy the skill folder (skills/seo/technical/sitemap in kostja94/marketing-skills) into .claude/skills/xml-sitemap in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kostja94/marketing-skills --skill xml-sitemap -a codex`. Or copy the skill folder (skills/seo/technical/sitemap in kostja94/marketing-skills) into .agents/skills/xml-sitemap in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kostja94/marketing-skills --skill xml-sitemap -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/xml-sitemap, .gemini/skills/xml-sitemap, .github/skills/xml-sitemap and .opencode/skills/xml-sitemap in your project.
Going by SKILL.md and its folder, XML Sitemap needs the command-line tools its instructions call (curl).
SKILL.md names 3 domains. In commands or code: sitemaps.org and w3.org; the agent is likely to contact these when it follows the instructions. As links in the text: developers.google.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
XML Sitemap is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with XML Sitemap: Hreflang and International SEO (AgriciDaniel/claude-seo, 19k stars), Google SEO APIs (AgriciDaniel/claude-seo, 19k stars), GEO-First SEO Audit Tool (zubair-trabzada/geo-seo-claude, 11k stars) and SEO Optimizer (ailabs-393/ai-labs-claude-skills, 454 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kostja94 (a GitHub user) maintains it in kostja94/marketing-skills, which has 1,025 GitHub stars. The repository holds 102 skills in this directory. The repository was last updated on October 6, 2026.
Source: kostja94/marketing-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.