SEO Landing: Give your AI coding agent the capabilities of a senior Technical SEO engineer. 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: β’ π 100/100 Google PageSpeed target β’ β‘ Core Web Vitals optimization
# Add to your Claude Code skills
git clone https://github.com/aleksandr-alhoff/seo-landingseo-landing is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by aleksandr-alhoff. SEO Landing: Give your AI coding agent the capabilities of a senior Technical SEO engineer. 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: β’ π 100/100 Google PageSpeed target β’ β‘ Core Web Vitals optimization. It has 51 GitHub stars.
seo-landing's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/aleksandr-alhoff/seo-landing" and add it to your Claude Code skills directory (see the Installation section above). seo-landing ships a SKILL.md manifest, so compatible agents can discover and load it automatically.
seo-landing is primarily written in HTML. It is open-source under aleksandr-alhoff on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh seo-landing against similar tools.
No comments yet. Be the first to share your thoughts!
Unlocks once the catalog security scan passes (runs nightly).
β οΈ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
Builds a static single-page HTML landing optimized for 100/100 PageSpeed and maximum SEO: critical CSS, AVIF images, full JSON-LD structured data, native-only interactivity, zero third-party requests on first load.
The skill serves three modes β pick one from the request (ask if ambiguous), because each mode collects different inputs and produces different output:
Representative routing:
Generation-only brief fields (target keywords, business type, CTA, media facts) are collected ONLY for generate and rebuild work. An audit or a targeted fix must not be blocked or delayed by missing generation inputs, and audit-only mode must not create or modify any project files.
Required before generating anything:
@id.WebSite markup, only when the page is the domain/subdomain home page): preferred site name, optional alternate names, and the canonical home URL β collected separately from the landing URL.BreadcrumbList markup, only when a real site hierarchy exists): the visible breadcrumb trail and canonical parent URLs.<html lang> (e.g. en-US, ar-SA), the base direction (ltr/rtl β RTL documents get dir="rtl" on <html>, and lang alone does not set directionality), and the Open Graph locale in language_TERRITORY format for og:locale (e.g. en_GB). Ask when direction is unknown for an RTL-capable language (tech-spec Β§2).Restaurant, Dentist, HardwareStore) β never chosen from target keywords. Never invent missing identity facts: fall back to Organization markup or omit entity markup until the facts are provided.contentUrl when applicable). Never invent missing media facts. Also collect the video mode with its trade-off stated: click-only facade (default β privacy/performance; the page will not satisfy Google's video discovery requirements and no video-search benefit is claimed) or SEO-discoverable (self-hosted <video> or a documented direct embed β required when video search traffic matters) (tech-spec Β§9).If domain or keywords are missing β ask first, do not invent them.
Audit an existing page without generating a replacement. No project files are created or modified in this mode β the deliverable is a report.
Apply targeted fixes to an existing page without a full rebuild.
Every project lives in its own folder inside the workspace β never write to the workspace root. The output is a multi-file project: every local resource referenced by the HTML must exist as a real file.
<workspace>/<project-slug>/
index.html # the generated landing page
styles.css # only when below-the-fold CSS is deferred (Β§1); absent when all CSS is inlined
script.js # only when the page uses JS (Β§10); single file, defer
images/ # every image variant referenced in src/srcset/preload/OG tags (AVIF/WebP/JPEG, all breakpoints)
favicon.png # stable square brand icon, β₯48Γ48
ASSETS.md # rights & provenance record for every asset
robots.txt
sitemap.xml
SERVER-SETUP.md # hosting instructions
Image branch:
srcset) from them.Build index.html strictly following references/tech-spec.md β 13 requirement sections (performance, HTML structure, SEO, security, CSS/fonts, forbidden list, testing, accessibility, embedded video, typical blocks, deferred widgets, content truthfulness & provenance, input sanitization & output encoding).
Treat every brief value as untrusted: encode it for its exact output context (HTML text, attribute, URL, JSON-LD), allow-list URL schemes (reject javascript:/unexpected data:), escape < in serialized JSON-LD, and validate structured IDs (e.g. YouTube ^[A-Za-z0-9_-]{11}$) before they reach any URL (tech-spec Β§13).
For embedded YouTube video use the facade pattern by default; the SEO-discoverable mode (self-hosted <video> or a documented direct embed) is an explicit brief choice with a disclosed trade-off, never a silent switch β rules and the Google discovery requirements in tech-spec Β§9, facade reference implementation in references/video-facade.md. Maps follow the facade rule only (tech-spec Β§10): a local screenshot in the initial DOM, the iframe inserted only on explicit activation β never a native loading="lazy" map iframe. Reference: references/map-facade.md.
robots.txt at the site root with a fully qualified Sitemap: line, never blocking the canonical page or required media.sitemap.xml with XML-escaped absolute canonical <loc> URLs matching the HTML canonical; lastmod only from a verifiable significant-content-change timestamp (omit when unknown β never use generation time blindly).Show the generated page to the user and ask explicitly whether the HTML version is OK. Do not proceed to validation and the final report until the user confirms. If there are remarks β fix and ask again.
Run the executable validation contract from tech-spec Β§7 β pinned commands against the served page, measured results only, explicit BLOCKER when a gate cannot run:
src/srcset, <source> srcset, preload href/imagesrcset, favicon, OG/Twitter images, CSS url(), script src) and verify each file exists in the project folder. Any missing referenced local resource is a hard failure β produce the file or remove the reference; never ship HTML pointing at files that were never created.reports/ β lab evidence only, never field Core Web Vitals and never WCAG certification.sitemap.xml, compare every <loc> with the HTML canonical, check the Sitemap: URL in robots.txt, and request both deployed files successfully (HTTP 200).Fix any violations found before reporting. Disclose evidence honestly: every reported number comes with the exact command and artifact path that produced it; a gate that could not run is reported as BLOCKER: <reason> instead of a number. Never output a PageSpeed/LCP score that was not actually measured.
Briefly list:
src/srcset/preload/OG URL must resolve to a real file in the project folder; missing source images are requested from the user, not invented (OUTPUT contract).javascript:/unexpected data: URLs, and self-test generation with hostile values (quotes, </script>, event-handler payloads) (tech-spec Β§13).defer before </body>.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 /