SEO Setup
alisamadiii/Portfolio
Full SEO/metadata setup and audit for client websites (Astro, Next.js, any static site).
Audits and improves SEO for Astro sites. An agent skill from jdevalk/skills.
$ npx skills add jdevalk/skills --skill astro-seo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jdevalk/skills astro-seo --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/jdevalk/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/astro-seo .claude/skills/astro-seo && 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 "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .claude/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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/jdevalk/skills/tree/main/astro-seoType 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 jdevalk/skills --skill astro-seo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jdevalk/skills astro-seo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jdevalk/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/astro-seo .agents/skills/astro-seo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .agents/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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 jdevalk/skills --skill astro-seo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jdevalk/skills astro-seo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jdevalk/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/astro-seo .cursor/skills/astro-seo && 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 "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .cursor/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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/jdevalk/skills.git --path astro-seo--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 jdevalk/skills --skill astro-seo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jdevalk/skills astro-seo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jdevalk/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/astro-seo .gemini/skills/astro-seo && 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 "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .gemini/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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 jdevalk/skills astro-seoInstalls 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 jdevalk/skills --skill astro-seo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jdevalk/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/astro-seo .github/skills/astro-seo && 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 "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .github/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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 jdevalk/skills --skill astro-seo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jdevalk/skills astro-seo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jdevalk/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/astro-seo .opencode/skills/astro-seo && 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 "astro-seo" agent skill from https://github.com/jdevalk/skills/tree/main/astro-seo into .opencode/skills/astro-seo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "astro-seo", 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.
astro-seoAudits and improves SEO for Astro sites. An agent skill from jdevalk/skills.
Astro SEO is an agent skill from jdevalk/skills. Audits and improves SEO for Astro sites. Use when the user asks to audit, set up, or improve SEO on an Astro site, or mentions head metadata, structured data, JSON-LD, sitemaps, IndexNow, Open Graph images, schema endpoints, NLWeb, hreflang, or search engine indexing in an Astro project. Produces drop-in code routed through @jdevalk/astro-seo-graph and chains into metadata-check for generated SEO strings.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `AGENTS.md` and `README.md`).
It sits in Marketing & SEO, covering Static sites and blogs, Schema markup and Technical SEO. It works with Astro. The repository describes itself as: Agent skills for GitHub repos and profiles, WordPress and EmDash plugins, Astro SEO, and content readability. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 106fc68. 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:
npmFrom 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:
schema.orgAlso links to:
github.comsearch.google.comclassyschema.orgjoost.blogllmstxt.orgrfc-editor.orgdatatracker.ietf.orga2a-protocol.orgagenticresourcediscovery.orgbing.complausible.ioFrom 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.
Astro SEO loads about 4.9k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 2,298 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 jdevalk/skills at commit 106fc68, republished under its MIT licence (© jdevalk). 2,298 words, ~4,934 tokens.
.claude/skills/astro-seo/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Audits and improves the SEO setup of an Astro site against the full stack described in Astro SEO: the definitive guide. The skill covers nine areas — technical foundation, structured data, content, site structure, performance, sitemaps and indexing, agent discovery, redirects, and analytics — and produces drop-in code for anything missing or weak.
The opinionated spine of this skill is @jdevalk/astro-seo-graph. Most of the fixes route through it. If the project doesn't use it yet, installing it is the first recommendation.
Code recipes live in AGENTS.md — read it when you need to implement a specific fix. This file has the workflow and audit checklist.
AGENTS.md.metadata-check on every short string the skill generated (titles, descriptions, schema description fields, FAQ answers, frontmatter excerpts).Confirm the basics before auditing:
astro.config.mjs / astro.config.ts exists.package.json has astro as a dependency.site: is set in astro.config — canonicals, sitemaps, and OG image URLs all derive from this. If it's missing, empty, or http://localhost, flag it as a blocking issue before anything else. This is the single most common misconfiguration.src/content/ (or legacy src/pages/ markdown).package.json, vercel.json, netlify.toml, wrangler.toml, or public/_headers to determine the host. This drives redirect and header syntax in Phase 2.@jdevalk/astro-seo-graph already installed? If yes, record the version and which features are wired (grep for <Seo, seoGraph(, createSchemaEndpoint, createSchemaMap, FuzzyRedirect, createIndexNowKeyRoute, createMarkdownEndpoint, createApiCatalog, gitLastmod). Check the installed version against the latest on npm with npm view @jdevalk/astro-seo-graph version. If the project is behind, recommend an upgrade in Phase 2 before auditing feature gaps — the package ships new defaults and fixes regularly, and an outdated version is a plausible cause for any audit finding. Phase 2 branches on this.i18n in astro.config or multiple locale directories under src/content/. If yes, hreflang matters; if no, skip it.Ask only what you can't detect. Don't ask the user what the site is about — read astro.config.mjs and the homepage content.
Score each category out of 10. For each, give 2–4 specific findings that quote the actual code or config. Within each category, checks are tiered:
Skip Nice checks for small personal blogs unless the user asks for the full treatment.
<Seo> component and head metadata (/10)site: in astro.config is set to the production origin.site config with tracking params stripped.noindex is true (per Google's recommendation).seo.title → title → siteName; seo.description → excerpt → first paragraph. Pages with blank titles or descriptions are the most common symptom of a broken fallback.robots meta includes max-snippet:-1, max-image-preview:large, max-video-preview:-1.hreflang alternates present on multilingual sites. Skip if monolingual.@jdevalk/astro-seo-graph's <Seo> component rather than hand-rolled. (Hand-rolled that covers everything above is fine; this skill nudges toward the package because it handles the fallback chain and robots rules by default.)Article object, or a linked @graph with multiple entities?@id references?WebSite, Blog/WebPage, Person/Organization, BlogPosting/Article, BreadcrumbList, ImageObject all present where relevant?publishingPrinciples, copyrightHolder, copyrightYear, knowsAbout, SearchAction?seoSchema from @jdevalk/astro-seo-graph enforcing title (5–120) and description (15–160) lengths?publishDate, title, excerpt) enforced at build time?articleBody exposed in schema endpoints (up to 10K chars)?<img> in rendered HTML has an alt attribute (or alt="" / role="presentation" for decorative images)? validateImageAlt on seoGraph() catches this at build time in ≥ 1.1.0.@astrojs/sitemap installed, sitemap index reachable.robots.txt references the sitemap index.@astrojs/rss), advertised via <link rel="alternate" type="application/rss+xml">, contains full post content (not truncated excerpts).chunks option (sitemap-posts-0.xml, etc.) — much easier to debug indexing in GSC.lastmod populated from git commit timestamps, not frontmatter dates or CI file timestamps. @jdevalk/astro-seo-graph ≥ 1.4.0 exports gitLastmod(filePath, { excludeCommits, depth }) for this — it returns the committer date of the most recent non-excluded commit that touched the file, or null if git is unavailable. Wire it into the sitemap serialize callback. If the codebase has a hand-rolled execSync('git log ...') helper, replace it with the package export — the export handles bulk-commit exclusion (imports, reformats) which a naïve -1 lookup can't./[key].txt. ≥ 1.0.1 excludes /404 from submissions by default. Gate submission on the production host (e.g. process.env.CF_PAGES === '1' && CF_PAGES_BRANCH === 'main', VERCEL_ENV === 'production', CONTEXT === 'production'). Unconditional submission pings the endpoint on every local npm run build and preview deploy with URLs the production host hasn't served yet, which gets the key marked invalid (403) and forces rotation./schema/*.json) exposing corpus-wide JSON-LD./schemamap.xml) listing all endpoints, with Schemamap: directive in robots.txt.llms.txt at the site root listing pages (title + description) for LLM consumers. @jdevalk/astro-seo-graph ≥ 0.9.0 generates this via the llmsTxt integration option./blog/post.md next to /blog/post/) serving clean markdown with YAML frontmatter for AI agents to consume without HTML parsing. @jdevalk/astro-seo-graph ≥ 1.2.0 ships createMarkdownEndpoint for the route and a markdownAlternate: true integration option that emits <link rel="alternate" type="text/markdown"> on every page. ≥ 1.3.0 adds post-build verification: the integration walks the build output and strips any link whose .md target isn't on disk (with a warn per occurrence) — so a misconfigured endpoint surfaces as a build warning instead of a shipped 404. Pair with a Cloudflare Transform Rule (URL rewrite via wildcard_replace, no Vary: Accept header — CF strips custom Vary values) for content negotiation on Accept: text/markdown without needing SSR./.well-known/api-catalog per RFC 9727. @jdevalk/astro-seo-graph ≥ 1.4.0 ships createApiCatalog, which auto-types schema endpoints to their https://schema.org/<Type> URLs and absolutizes paths against siteUrl. List the schema endpoints, schemamap, and any site-specific APIs (/ask, /feed.xml, etc.). The RFC is finalized so the format is stable; adoption is early but the cost is one route file.robots.txt (e.g. Content-Signal: ai-train=yes, search=yes, ai-input=yes). Declares preferences for AI training, search grounding, and AI input use independently of crawl access. The spec is an IETF draft and adoption is early, but it's one line in a file every site already has.Link header on /* pointing to discovery files (sitemap, llms.txt, api-catalog, schemamap, and any MCP / A2A cards the site publishes). Agents reading response headers find them without parsing HTML. On Cloudflare Pages / Netlify this is public/_headers; on Vercel it's vercel.json./.well-known/mcp/server-card.json (SEP-1649) and / or A2A agent card at /.well-known/agent-card.json (A2A protocol). Only relevant when the site actually exposes an MCP server or A2A agent. Both are static JSON files declaring the endpoint, capabilities, and skills. Skip otherwise.<link rel="nlweb"> pointing to a conversational endpoint. NLWeb is early; the tag is one line and worth having, but it's not a scoring blocker in 2026./.well-known/ai-catalog.json, listing what the domain offers (MCP server, A2A agent, OKF bundle, site-specific APIs). v0.9 draft, so optional — but it's the discovery layer the MCP / A2A cards and OKF bundle pay off through. Two gotchas: the base spec (Agent-Card/ai-catalog) names the media-type field mediaType while the ARD layer (ards-project/ard-spec) names it type — emit both keys with the same value so the entry validates under either reading (both specs require consumers to ignore unknown keys). ARD also adds an optional representativeQueries array of sample prompts per entry..tar.gz, with index files in between. Serving and discovery are explicit non-goals of OKF — that's what the ARD catalog entry is for. v0.9 draft, optional. There's no registered media type yet, so the interim string is application/okf-bundle+gzip (tracked in knowledge-catalog#111 and ard-spec#27); mark it interim, it may change. Best generated as one more output of an existing content pipeline rather than a hand-maintained copy.<Image> component used for all content images (responsive srcset, WebP, lazy, async)?<ClientRouter /> with defaultStrategy: 'viewport' for prefetch?/_astro/ serve Cache-Control: public, max-age=31536000, immutable?No-Vary-Search response header stripping UTM parameters from cache key?public/_redirects (or equivalent) maintained for every URL that ever existed and moved?FuzzyRedirect component from @jdevalk/astro-seo-graph wired into the 404 page?seoGraph() integration running on each build with validateH1 and validateUniqueMetadata enabled. For JSON-LD validation, pass warnOnDanglingReferences: true to assembleGraph() in seo-graph-core — that's the assembly-time check, not an integration option.validateImageAlt, validateMetadataLength, and validateInternalLinks enabled on seoGraph() (all default true in ≥ 1.1.0). They catch missing alt text, titles or descriptions outside SERP bounds (defaults: title 30–65, description 70–200), and internal links that 404 or hit a trailing-slash mismatch. Upgrade to ≥ 1.1.1 if the project is on 1.1.0 — that patch release fixes two validator bugs: validateInternalLinks now recognises public/ assets as valid targets (no more false positives on /images/* or /fonts/*), and validateMetadataLength no longer truncates descriptions containing a raw apostrophe. Use skip only for SSR-only routes, wildcards, and [slug] params.validateInternalLinks at build time; lychee handles everything else.metadata-check. Individual post prose can be audited separately via readability-check.Based on the audit, produce the concrete code. Always ask before overwriting. Read AGENTS.md for detailed recipes.
Branch on the Phase 0 findings. If @jdevalk/astro-seo-graph is already installed, skip the install step and focus on wiring the features the audit flagged as missing (IndexNow, FuzzyRedirect, schema endpoints, build validation). If the user has a hand-rolled setup that already satisfies the Must checks in category 1, don't rip it out — add only what's missing. Replacement is a last resort, not the default.
AGENTS.md sections: Install/upgrade, Integration config, BaseHead.astro, Content collection schema, Sitemap + git lastmod, OG image route, Schema endpoints, llms.txt, Markdown alternates, API catalog, Content Signals in robots.txt, MCP and A2A discovery cards, Link headers for agent discovery, RSS feed, Redirects + FuzzyRedirect, Performance headers, Broken link checker in CI.
Invoke the metadata-check skill on every short string the skill generated or modified: page titles, meta descriptions, schema description fields, FAQ answers, and any blog post frontmatter excerpt values you wrote. It checks front-loading, concreteness, filler, active voice, title/description duplication, difficult words, SERP-truncation fit (title 30–65, description 70–200 — the same bounds validateMetadataLength enforces), and one-idea-per-field. Apply the fixes directly. Skip the pass entirely for technical strings (URLs, schema @id values, enum values).
If the project has a blog or docs content collection, mention to the user as a follow-up that the readability-check skill can audit individual posts for multi-paragraph prose quality — but don't audit the entire content corpus yourself.
npm run build. If seoGraph() is wired, this also runs H1 validation, duplicate-meta detection, and schema validation — surface any warnings.<head> should now be clean, canonical correct, JSON-LD graph present and linked./sitemap-index.xml exists and references per-collection sitemaps./[key].txt.## Astro SEO audit: [site name]
### Score
| Category | Score |
|---------------------------------------|------:|
| 1. `<Seo>` component and head | x/10 |
| 2. Structured data / JSON-LD graph | x/10 |
| 3. Content collections and schema | x/10 |
| 4. Open Graph images | x/10 |
| 5. Sitemaps and indexing | x/10 |
| 6. Agent discovery | x/10 |
| 7. Performance | x/10 |
| 8. Redirects and error handling | x/10 |
| 9. Build-time validation and content | x/10 |
| **Total** | xx/90 |
### Findings
[Grouped by category. Quote actual code/config. Be specific.]
### Files generated or changed
[List with short description of each.]
### Next steps
[Non-file tasks: GSC, Bing Webmaster Tools, IndexNow key generation, analytics.]@jdevalk/astro-seo-graph is the spine. Route the <Seo> component, schema endpoints, IndexNow, FuzzyRedirect, and build validation through it unless the user has a strong reason to hand-roll.© jdevalk, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 2 other files in astro-seo of jdevalk/skills.
Open the folder on GitHubat commit 106fc68
Astro SEO 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 |
|---|---|---|---|---|---|---|
| Astro SEO this skilljdevalk/skills | 104 | — | ~4.9k | Automated safety check: Pass | MIT | |
| SEO Setupalisamadiii/Portfolio | 180 | — | ~1.7k | Automated safety check: Pass | None | |
| SEOgridaco/grida | 2.7k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Nuxt SEOsecondsky/claude-skills | 227 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Content Freshness Signalsthedaviddias/Front-End-Checklist | 74k | — | ~741 | Automated safety check: Pass | MIT | |
| Docs AuditorInfrasity-Labs/dev-gtm-claude-skills | 139 | — | ~3k | Automated safety check: Pass | MIT |
alisamadiii/Portfolio
Full SEO/metadata setup and audit for client websites (Astro, Next.js, any static site).
gridaco/grida
SEO best practices for the Grida project across Next.js pages, blog posts, and documentation.
secondsky/claude-skills
Nuxt SEO v5 modules (robots, sitemap, og-image, schema-org, link-checker, seo-utils, site-config).
thedaviddias/Front-End-Checklist
Audits article pages for freshness signals, covering the Last-Modified header, Article JSON-LD dateModified and a visible last-updated date, and fixes mismatches.
Infrasity-Labs/dev-gtm-claude-skills
Audits any developer documentation site across 33 checks in 7 categories and produces a scored report (out of 100) with Pass / Warn / Fail status per check.
nowork-studio/notfair-plugin
Image SEO audit — make a site's images discoverable in Google Images and stop them from dragging down Core Web Vitals.
jdevalk/skills
Clones a live WordPress (or other CMS-driven) site into a static HTML site deployable on any static host (Cloudflare Pages, Netlify, Vercel, S3+CloudFront, plain Apache/nginx).
jdevalk/skills
Audits a blog post draft or page copy for content-level SEO: search intent fit, focus keyphrase placement, E-E-A-T signals (experience, expertise, authoritativeness, trustworthiness), helpfulness…
jdevalk/skills
Reviews short high-value strings — page titles, meta descriptions, schema description fields, FAQ answers, GitHub repo taglines, profile bios, social-card copy, and other metadata where Flesch and…
jdevalk/skills
Runs a readability audit on a blog post draft or other multi-paragraph prose, calibrated for readers who read English as a second language.
jdevalk/skills
Audits and improves SEO for static HTML sites. An agent skill from jdevalk/skills.
jdevalk/skills
Audits and optimizes GitHub profile pages — profile README, metadata fields, pinned repositories, stats widgets, and contribution visibility.
Works with
Categories
Audits and improves SEO for Astro sites. An agent skill from jdevalk/skills. Astro SEO is an agent skill from jdevalk/skills. Audits and improves SEO for Astro sites.
Astro SEO fits situations like: the user asks to audit; improve SEO on an Astro site; mentions head metadata; structured data.
Run `npx skills add jdevalk/skills --skill astro-seo -a claude-code`. Or copy the skill folder (astro-seo in jdevalk/skills) into .claude/skills/astro-seo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jdevalk/skills --skill astro-seo -a codex`. Or copy the skill folder (astro-seo in jdevalk/skills) into .agents/skills/astro-seo 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 jdevalk/skills --skill astro-seo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/astro-seo, .gemini/skills/astro-seo, .github/skills/astro-seo and .opencode/skills/astro-seo in your project.
Going by SKILL.md and its folder, Astro SEO needs the command-line tools its instructions call (npm).
SKILL.md names 12 domains. In commands or code: schema.org; the agent is likely to contact it when it follows the instructions. As links in the text: github.com, search.google.com, classyschema.org, joost.blog, llmstxt.org, rfc-editor.org, datatracker.ietf.org, a2a-protocol.org, agenticresourcediscovery.org, bing.com and plausible.io. 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.
Astro SEO is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k 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 Astro SEO: SEO Setup (alisamadiii/Portfolio, 180 stars), SEO (gridaco/grida, 2.7k stars), Nuxt SEO (secondsky/claude-skills, 227 stars) and Content Freshness Signals (thedaviddias/Front-End-Checklist, 74k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jdevalk (a GitHub user) maintains it in jdevalk/skills, which has 104 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on July 5, 2026.
Source: jdevalk/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.