SEO Landing: Give your AI coding agent the capabilities of a senior Technical SEO engineer.
$ npx -y skills add aleksandr-alhoff/seo-landing --agent claude-code
An agent skill for building high-performance, technically optimized SEO landing pages. Turn an AI coding agent into a technical SEO specialist.
Build and improve landing pages with:
π·πΊ ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΊΠΈΠ»Π° Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅
Designed for agentic coding workflows and compatible with Agent Skillsβstyle environments.
The skill guides an AI coding agent through the complete landing-page workflow:
AI can generate a beautiful landing page in seconds. The problem is that generated pages often contain:
SEO Landing Skill gives the agent a repeatable technical SEO workflow instead of relying on generic prompting.
An agent skill that builds and updates landing pages toward 100/100 lab PageSpeed and Core Web Vitals-friendly performance, and gets the technical SEO right. Static HTML, critical CSS, AVIF images, full schema.org markup, zero third-party requests on first load (deferred widgets, when used, are consent-gated and documented in the dependency manifest). These are optimization targets, not guaranteed outcomes β results depend on content, hosting, devices, and real traffic; Core Web Vitals status itself is determined by Google from field (RUM) data, not by lab tools.
BEFORE
Landing page
β
LCP: 4.2s
Performance: 61
Missing schema
Large PNG
Render-blocking CSS
β SEO LANDING SKILL β
AFTER
Landing page
β
LCP: 1.1s
Performance: 100
Schema.org β
AVIF β
Critical CSS β
Semantic HTML β
Format β Agent Skills (open standard originally developed by Anthropic): works in VS Code Copilot, Claude Code, OpenAI Codex, Google Antigravity, Cursor, Gemini CLI, OpenClaw, Hermes, and other compatible agents.
seo-landing/
βββ SKILL.md # Main workflow: mode routing β brief β generation β stop point β validation β report
βββ references/
β βββ tech-spec.md # Technical spec (13 requirement sections + executable validation contract)
β βββ server-config.md # Server config: caching, Brotli/gzip, security headers (Nginx/Apache)
β βββ video-facade.md # Reference implementation of the "facade" pattern for YouTube
β βββ map-facade.md # Reference implementation of the "facade" pattern for map embeds
βββ benchmark/ # Lab benchmark disclosure: fixture, raw Lighthouse reports, methodology
βββ tests/
βββ fixtures/broken-landing/ # Negative fixture: every validator gate must fail on it
fetchpriority="high" (a responsive imagesrcset/imagesizes preload only when measurement shows a benefit)<picture>, srcset/sizes, width/height, loading="lazy" for below-the-fold images only (never on the LCP image), breakpoints 320β1920WebSite, Organization, BreadcrumbList, FAQPage, VideoObject β emitted only when fact-backed and reported per the chosen video mode, never as a guaranteed search feature)prefers-reduced-motionX-Content-Type-Options, X-Frame-Options, Permissions-Policy, Referrer-Policy, per-page CSP, staged HSTS, HTTPS enforcement, rel="noopener noreferrer"defer; deferred third-party widgets (when used) are consent-gated, excluded from the budget, and disclosed in the dependency manifest<video> or a documented direct embed) exists when video search matters (tech-spec Β§9). Maps remain facade-only.<details>, slider via scroll-snap, modal via <dialog>One reproducible lab benchmark: Lighthouse CLI 13.4.1, mobile emulation, simulated throttling. Original β an Angular SPA (102 requests, 1 run); the same page rebuilt as static HTML with this skill (17β18 requests, median of 5 runs). Full disclosure β fixture, exact flags, raw JSON reports, timestamps, and aggregation method β is in benchmark/README.md.
| Metric | Original | Rebuilt | Gain |
|---|---|---|---|
| Performance | 75 | 100 | +25 |
| Accessibility | 75 | 100 | +25 |
| Best Practices | 73 | 100 | +27 |
| LCP | 3.3 s | 1.6 s | β52% |
| Total Blocking Time | 490 ms | 13 ms | β97% |
| TTI | 9.4 s | 1.6 s | β83% |
| Data transferred | 769 KiB | 110 KiB | β86% |
| Requests | 102 | 17 | β83% |
These are lab numbers for one before/after pair. They are not field Core Web Vitals (Google determines CWV status from CrUX/RUM field data at the 75th percentile, and Lighthouse cannot measure INP without real interaction), and they are not a guarantee that another page, host, device, or audience will reach the same results β the skill's targets are optimization goals, not promised outcomes.
The skill is hosted at github.com/aleksandr-alhoff/seo-landing. Clone the repository β the repo root is the skill folder itself β then run the commands below from the directory that contains seo-landing/:
git clone https://github.com/aleksandr-alhoff/seo-landing.git
Every recipe below is self-contained: it creates its destination directory first, then copies the skill into it. Each one must exit with status 0 and leave the layout <skills-dir>/seo-landing/SKILL.md in place.
Note: cp -R from a git clone also copies the clone's .git directory into the installation β harmless, but unnecessary. To keep installations lean, replace cp -R seo-landing <dir>/ with rsync -a --exclude=.git seo-landing <dir>/seo-landing/ (the same sync used for updates below).
# VS Code Copilot
mkdir -p ~/.copilot/skills
cp -R seo-landing ~/.copilot/skills/
# Claude Code
mkdir -p ~/.claude/skills
cp -R seo-landing ~/.claude/skills/
# OpenAI Codex CLI / ChatGPT desktop
mkdir -p ~/.agents/skills
cp -R seo-landing ~/.agents/skills/
# Cursor
mkdir -p ~/.cursor/skills
cp -R seo-landing ~/.cursor/skills/
# Gemini CLI
mkdir -p ~/.gemini/skills
cp -R seo-landing ~/.gemini/skills/
# Google Antigravity
mkdir -p ~/.gemini/config/skills
cp -R seo-landing ~/.gemini/config/skills/
# OpenCode
mkdir -p ~/.config/opencode/skills
cp -R seo-landing ~/.config/opencode/skills/
# OpenClaw (via CLI β installs into the shared ~/.openclaw/skills)
openclaw skills install git:aleksandr-alhoff/seo-landing --global
# or from a local clone: openclaw skills install ./seo-landing --global
# or manually:
mkdir -p ~/.openclaw/skills
cp -R seo-landing ~/.openclaw/skills/
# Hermes
mkdir -p ~/.hermes/skills
cp -R seo-landing ~/.hermes/skills/
OpenClaw also picks up skills from ~/.agents/skills (the Codex path above), and Hermes can scan it too if you add ~/.agents/skills to skills.external_dirs in ~/.hermes/config.yaml.
Gemini CLI can also install straight from a Git repository:
gemini skills install https://github.com/aleksandr-alhoff/seo-landing.git
# Shared .agents/skills β picked up by VS Code Copilot, Codex, Cursor, Antigravity, Gemini CLI, OpenCode, OpenClaw, Hermes
mkdir -p .agents/skills
cp -R seo-landing .agents/skills/
# Claude Code
mkdir -p .claude/skills
cp -R seo-landing .claude/skills/
# VS Code Copilot (GitHub-style location)
mkdir -p .github/skills
cp -R seo-landing .github/skills/
# OpenClaw (workspace skills β highest precedence)
# via CLI: openclaw skills install ./seo-landing
mkdir -p skills
cp -R seo-landing skills/
# Hermes (project-local; then trust the repo once: hermes skills trust)
mkdir -p .hermes/skills
cp -R seo-landing .hermes/skills/
Two facts drive everything below:
git pull changes only the clone. An installed copy made with cp -R is independent β pulling the source clone does NOT update any installation.cp -R copies, it does not synchronize. GNU cp has no destination-sync/removal behavior: a file deleted upstream stays in the installed copy forever, producing a mixed release of old and new instructions.So an update is an explicit, bounded, idempotent sync into the resolved skill destination β never a blind re-copy.
| Client / scope | Installed skill destination ($DEST) |
|---|---|
| VS Code Copilot β global | ~/.copilot/skills/seo-landing |
| Claude Code β global | ~/.claude/skills/seo-landing |
| OpenAI Codex CLI / ChatGPT desktop β global | ~/.agents/skills/seo-landing |
| Cursor β global | ~/.cursor/skills/seo-landing |
| Gemini CLI β global | ~/.gemini/skills/seo-landing |
| Google Antigravity β global | ~/.gemini/config/skills/seo-landing |
| OpenCode β global | ~/.config/opencode/skills/seo-landing |
| OpenClaw β global | ~/.openclaw/skills/seo-landing |
| Hermes β global | ~/.hermes/skills/seo-landing |
| Shared per-project (Copilot, Codex, Cursor, Antigravity, Gemini CLI, OpenCode, OpenClaw, Hermes) | .agents/skills/seo-landing |
| Claude Code β per project | .claude/skills/seo-landing |
| VS Code Copilot β per project (GitHub-style) | .github/skills/seo-landing |
| OpenClaw β workspace (highest precedence) | skills/seo-landing |
| Hermes β per project | .hermes/skills/seo-landing |
Run from the directory that contains the updated seo-landing/ clone, with $DEST set to the destination from the table above:
DEST=~/.copilot/skills/seo-landing # β substitute the right destination
# 1. Recovery first: back up the current installation (the sync is destructive).
cp -R "$DEST" "$DEST.backup-$(date +%Y%m%d)"
# 2. Bounded idempotent sync: copy new/changed files AND delete files inside
# $DEST that no longer exist upstream. --delete only ever touches $DEST.
rsync -a --delete --exclude=.git seo-landing/ "$DEST/"
# 3. Verify: zero differences (exit status 0) and the installed SKILL.md
# matches the source revision byte-for-byte.
diff -qr -x .git seo-landing "$DEST" && cmp "$DEST/SKILL.md" seo-landing/SKILL.md
Notes:
seo-landing is a Claude Code plugin with 1 hand-picked skill, indexed on Flowy in the SEO category. Install it with the command on its page. It includes seo-landing. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it