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.
Audit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts.
$ npx skills add every-app/open-seo --skill seo-audit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install every-app/open-seo seo-audit --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/every-app/open-seo.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/seo-audit .claude/skills/seo-audit && 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 "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .claude/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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/every-app/open-seo/tree/main/.agents/skills/seo-auditType 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 every-app/open-seo --skill seo-audit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install every-app/open-seo seo-audit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/seo-audit .agents/skills/seo-audit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .agents/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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 every-app/open-seo --skill seo-audit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install every-app/open-seo seo-audit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/seo-audit .cursor/skills/seo-audit && 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 "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .cursor/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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/every-app/open-seo.git --path .agents/skills/seo-audit--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 every-app/open-seo --skill seo-audit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install every-app/open-seo seo-audit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/seo-audit .gemini/skills/seo-audit && 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 "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .gemini/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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 every-app/open-seo seo-auditInstalls 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 every-app/open-seo --skill seo-audit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/seo-audit .github/skills/seo-audit && 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 "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .github/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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 every-app/open-seo --skill seo-audit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install every-app/open-seo seo-audit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/every-app/open-seo.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/seo-audit .opencode/skills/seo-audit && 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 "seo-audit" agent skill from https://github.com/every-app/open-seo/tree/main/.agents/skills/seo-audit into .opencode/skills/seo-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-audit", 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.
seo-auditAudit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts.
SEO Audit is an agent skill from every-app/open-seo. Audit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts.
Its SKILL.md is about 3.8k 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 SEO audit. The repository describes itself as: Open source alternative to Semrush and Ahrefs. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit deb4491. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are html).
From 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:
openseo.soFrom 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.
SEO Audit loads about 3.8k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 2,073 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 every-app/open-seo at commit deb4491, republished under its MIT licence (© every-app). 2,073 words, ~3,786 tokens.
.claude/skills/seo-audit/SKILL.md (or your agent's skills folder).Find the work that would most improve a site's useful organic traffic, then explain it so a non-expert can act on it. Research broadly; recommend selectively. The report leads with one to three recommendations that either capture meaningfully more qualified search demand or stop a real loss.
Use this when asked for an SEO audit or review of a domain, especially for a shareable report. For expert-facing analysis of a competitor or market, use competitor-analysis or competitive-landscape instead.
projectId (list_projects; if no project matches, create_project).get_project_context first. This skill needs business_overview. If it is empty, infer what the business does from the site, confirm it with the user in one question, write it back with update_project_context, and continue. Suggest seo-project-setup at the end for the rest; never front-load the full interview.update_project_context (a corrected business_overview, the pages the report names via addKeyPages) and append { appendResearchLog: { summary: "Site audit: <domain>. Verdict: <conclusion>" } }.Deliver through the seo-report skill, saving with skill: "seo-audit". If that skill is unavailable, say so and stop before writing HTML.
whoami: confirm the connection and credits before spending. If OpenSEO is not connected, stop and ask the user to connect it.run_site_audit, then get_audit_status (wait a minute or two between checks), get_audit_issues, get_audit_pages. Leave Lighthouse off unless the user asked for performance depth. Crawl reads are free.get_backlinks_overview and get_domain_overview: orientation only. Provider traffic and keyword counts are estimates with no single observation date; they are not measured visits.get_ranked_keywords: which queries send which pages traffic. Start with one domain-level call with resultTypes: ["organic"]; use scope: "exact_url" for the specific pages you compare. A page missing from a limited domain sample is not proof it has no rankings. Ranking rows carry their own last_updated_time; keyword metric dates are not ranking dates.get_serp_results: the live check behind every ranking claim in the report. The returned rank counts every result block, so count organic (unpaid) listings yourself and report the spot with its page, ten spots per page: "#10 (page 1)", "#11 (page 2)". Request depth 20; a page not seen is "not in the first 20 results". Record the exact query, country, language, date, how many organic listings came back, and the matching URL; those details go in the evidence appendix, not the tables. A failed lookup is unknown, not "not in the first 20 results".get_search_console_performance: when connected, first-party clicks and impressions separate low visibility from low click-through. Missing access is a coverage gap, not a blocker.get_keyword_metrics and research_keywords: demand for the queries a candidate page targets. One focused metrics batch usually suffices; one research call with 1–3 seeds when a demand gap could change the decision.Research until another lookup is unlikely to change which opportunities lead. Respect an explicit user budget and say which comparison it prevented.
whoami, resolve the project, start run_site_audit. While it crawls: backlinks overview, domain overview, the domain-level ranked-keyword sample, and the sitemap plus navigation. Write down the site's page families from the sitemap, not just the crawl sample: product, pricing, comparison or alternative, tools and templates, guides, categories, services, locations, whatever the site actually has.
If the crawl is broken or nearly empty (certificate error, 5xx, one page), investigate before anything else. Check redirects and certificate variants yourself and search for the business; a dead domain with a live successor flips the whole recommendation to "redirect the old domain".
For each family that could bring buyers, read at least two pages' main content (ignore navigation and shared templates): the page performing best in the ranking data and one performing worst or typical. For each page ask: what decision or question does its searcher have, and does the page answer it with specific, accurate, sourced information, or does it substitute a name, location, or keyword into a shared answer? Compare against what the leading results for that query provide.
A common SaaS pattern worth checking directly: competitor comparison or alternative pages and competitor pricing pages are two separate families, each answering a different buying question. Read siblings side by side. Investigate uneven visibility between siblings (intent, content specificity, links, authority); a sibling that already ranks near the top is something to protect rather than rewrite.
Check the basics for any page you might name: status, canonical (the URL the page declares as its preferred version), index directives, and how visitors reach it internally. Broaden when a family is missing from the crawl, when siblings perform very differently, when a tool or template page turns out to rank, or when a live query returns a different page than expected.
Run the live checks now, not after drafting: the query cluster each candidate page serves (the head term plus the variants buyers actually use), including both sides of any stronger-versus-weaker comparison. Re-run the queries that decide the leading recommendation before writing. If two checks disagree, write the later one and the earlier in brackets, for example "#10, page 1 (first check: not in the first 20 results)"; that spread is same-day variation, not a trend. One snapshot is not a baseline.
Write opportunities.md in your working folder (working notes, not the deliverable): one row per serious candidate, usually five to ten, drawn from at least three different kinds of opportunity:
Columns: pages | problem observed | evidence (query cluster with US monthly volumes, spot and page or "not in the first 20 results", date) | proposed change | who searches and why they matter to this business | plausible benefit | effort | main uncertainty.
If a row's ranking would change with one more lookup (a missing volume, an unchecked sibling, a query you never ran live), do that lookup before ranking.
Prefer a bounded change that directly fixes a demonstrated problem for searchers likely to become customers, with a credible path to a meaningful gain. A larger raw-volume opportunity with a weaker diagnosis does not automatically outrank it. A genuine access or indexing blocker, a measurable traffic loss, or a dead domain jumps the queue.
None of these decides on its own: the volume of one sampled query; how easy the fix is; a crawler warning; a hypothetical position-one traffic figure; a navigation or redirect repair with no demonstrated traffic loss. Those belong in the checked table, not the top three. Do not recommend rewriting a page that already ranks near the top for its target query.
Every shortlist row ends in one of two places: a recommendation, or a row in the report's "What else we checked" table with a real reason. "Later, if sales asks for it" is not a reason; "demand is a quarter of the leading candidate's and the page already ranks seventh" is. For the runner-up, write one sentence on why the leader beats it; that sentence goes in the report.
Draft the report body (markdown or HTML, not yet saved). Give the reviewer (a second agent or model if your environment can run one, otherwise a fresh self-review) that draft and the shortlist. The reviewer must: argue the case for the strongest rejected row and say whether the draft answers it; confirm the leading recommendation's evidence is in the draft; confirm every material diagnosis from step 2 survived as a recommendation or a table row; check dates, geography, and rank conventions; and flag paragraph-length bullets and jargon. Fix what it finds, verify any new factual claim against the evidence, then write and save through seo-report.
Use the title conventions in seo-report. Sections, in order:
h3 naming the action and the page or small group, then:seo-report (URL https://openseo.so/docs/skills/seo-audit, text "OpenSEO SEO Audit skill"), a two-line coverage and limits note, then a <details><summary>Evidence and methodology</summary> block, closed by default, holding the crawl sample, page families read, the full live-check table (query, volume, position, organic listings returned, time), calculations, and sources. Keep it self-contained; local file paths are not evidence.Writing rules: short bullets, one idea each, usually 8–20 words. No Problem / Change / Expected effect paragraphs and no repeated summaries. There is no word target; if the main body outgrows about two screens, move supporting detail into the disclosure instead of deleting it. If the research establishes no worthwhile action, say what is working and what the audit could not establish rather than filling the format.
Skeleton for one recommendation and the checked table (keep the seo-report CSS unchanged; every h2 needs an id and a contents-rail entry):
<h2 id="recommendations">Recommendations</h2>
<h3>Make the Northwind comparison answer a switching decision</h3>
<p><strong>Do this</strong></p>
<ul>
<li>Replace the shared table on <a href="URL" target="_blank" rel="noopener">/northwind-alternative</a> with Northwind-specific tradeoffs.</li>
<li>Add a sourced migration section: policies, evidence, audit continuity.</li>
</ul>
<p><strong>Why</strong></p>
<ul>
<li>Same comparison text as two siblings; only the vendor name changes.</li>
<li>Searchers are already evaluating a switch, the closest fit to a demo.</li>
<li>Position-one scenario: about 40–60 total US visits a month. Hypothetical, not a forecast.</li>
</ul>
<div class="tw"><table>
<thead><tr><th>Query</th><th class="n">Est. US searches/mo</th><th>Acme position, US, Sep 18, 2026</th></tr></thead>
<tbody><tr><td>northwind alternative</td><td class="n">50</td><td>#9 (page 1)</td></tr></tbody>
</table></div>
<h2 id="what-else-we-checked">What else we checked</h2>
<div class="tw"><table>
<thead><tr><th>Opportunity</th><th>What we found</th><th>Decision</th></tr></thead>
<tbody><tr><td>Software buying guide</td><td>390 est. US searches/mo; not in the first 20 results; page explains criteria, compares no vendors</td><td>Runner-up. Larger demand, but a weaker diagnosis and a full rewrite; test the comparison page first.</td></tr></tbody>
</table></div>seo-report is the exception). Severity words only where literally true.© every-app, 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 .agents/skills/seo-audit of every-app/open-seo.
Open the folder on GitHubat commit deb4491
SEO Audit 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 |
|---|---|---|---|---|---|---|
| SEO Audit this skillevery-app/open-seo | 23k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Hreflang and International SEOAgriciDaniel/claude-seo | 18k | 5 repos | ~3.4k | Automated safety check: Pass | MIT | |
| Google SEO APIsAgriciDaniel/claude-seo | 18k | 1 repos | ~4.2k | Automated safety check: Pass | MIT | |
| FLOW SEO FrameworkAgriciDaniel/claude-seo | 18k | 2 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Broken Link Checkernowork-studio/notfair-plugin | 3.9k | 1 repos | ~507 | Automated safety check: Pass | MIT | |
| GEO-First SEO Audit Toolzubair-trabzada/geo-seo-claude | 11k | — | ~2.8k | Automated safety check: Notes | 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.
AgriciDaniel/claude-seo
Brings the FLOW framework's stage-specific SEO prompts into the agent, from keyword discovery through backlinks, on-page work and conversion to local SEO, loaded on demand.
nowork-studio/notfair-plugin
Crawls a website with a bundled Python script to find broken internal and outbound links, then reports them by status code with the pages they appear on.
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.
zubair-trabzada/geo-seo-claude
Compares a baseline and a current GEO audit for a client, calculates score changes and action item progress, and writes a monthly progress report.
every-app/open-seo
Log genuine, recurring repository friction to .agents/PAPERCUTS.md — confusing setup, a flaky repo command or script, a misleading in-repo error, stale generated files, or a non-obvious gotcha that…
every-app/open-seo
Test a candidate OpenSEO skill end to end by running fresh, isolated Codex sessions against the local backend and scoring the reports they save.
every-app/open-seo
Turn a rough bug report, feature request, support note, or pull request into a short, plain-language issue focused on the problem and desired behavior.
every-app/open-seo
Create or update a skill in this repository the right way — canonical home in .agents/skills, internal-vs-public marking, symlink mirroring into .claude/skills, and public docs registration for…
every-app/open-seo
Remove AI writing patterns from prose so it reads like a person wrote it.
every-app/open-seo
Triage OpenSEO production errors in Cloudflare Workers Observability — verified query recipes, counting gotchas, and a known-noise filter list applied automatically.
Categories
Audit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts. SEO Audit is an agent skill from every-app/open-seo. Audit a website, investigate its real search opportunities, and deliver a short data-backed report on the few changes most likely to grow organic traffic that converts.
SEO Audit fits situations like: tasks that involve SEO audit.
Run `npx skills add every-app/open-seo --skill seo-audit -a claude-code`. Or copy the skill folder (.agents/skills/seo-audit in every-app/open-seo) into .claude/skills/seo-audit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add every-app/open-seo --skill seo-audit -a codex`. Or copy the skill folder (.agents/skills/seo-audit in every-app/open-seo) into .agents/skills/seo-audit 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 every-app/open-seo --skill seo-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/seo-audit, .gemini/skills/seo-audit, .github/skills/seo-audit and .opencode/skills/seo-audit in your project.
SKILL.md names no scripts, command-line tools or credentials: SEO Audit is instructions for the agent only.
SKILL.md names 1 domain. In commands or code: openseo.so; the agent is likely to contact it when it follows the instructions. 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.
SEO Audit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.8k tokens (SKILL.md is roughly 15k 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 SEO Audit: Hreflang and International SEO (AgriciDaniel/claude-seo, 18k stars), Google SEO APIs (AgriciDaniel/claude-seo, 18k stars), FLOW SEO Framework (AgriciDaniel/claude-seo, 18k stars) and Broken Link Checker (nowork-studio/notfair-plugin, 3.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
every-app (a GitHub organization) maintains it in every-app/open-seo, which has 22,680 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 6, 2026.
Source: every-app/open-seo on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.