SEO
by addyosmani / web-quality-skills
Optimize for search engine visibility and ranking.
Expert guide for technical SEO auditing.
Listed ·Updated
Install data from skills.sh
SEO Technical Audit is a Technical SEO skill for AI agents, published in the seoskills.sh catalog. Reach for it when your work involves crawlability, indexing, site architecture, Core Web Vitals, and log-file analysis. Install it with one command and it runs inside your own agent, so the work happens in your workflow, not a separate SEO tool.
Search engines must be able to discover and access your pages. Crawlability issues block indexing entirely.
Controls which URLs crawlers can access.
# Allow all crawlers access to everything
User-agent: *
Allow: /
# Block specific paths
User-agent: *
Disallow: /admin/
Disallow: /api/
Disallow: /staging/
Disallow: /*?sort=
Disallow: /*?filter=
# Sitemap reference (always include)
Sitemap: https://example.com/sitemap.xml
Critical rules:
analyze_robots_txt before deploying changesCrawl-delay is ignored by Google (honored by Bing/Yandex)Page-level crawl and index directives.
| Directive | Effect |
|---|---|
index | Allow indexing (default) |
noindex | Prevent indexing — removes from search results |
follow | Follow links on this page (default) |
nofollow | Don't follow any links on this page |
noarchive | Don't show cached version |
nosnippet | Don't show text snippet in results |
max-snippet:N | Limit snippet to N characters |
max-image-preview:large | Allow large image previews |
<!-- In HTML head -->
<meta name="robots" content="noindex, follow">
<!-- Via HTTP header (for non-HTML files) -->
X-Robots-Tag: noindex, nofollow
MCP Tool: analyze_page extracts both meta robots and HTTP header directives.
The definitive way to tell search engines which URL is the preferred version.
Rules:
https://example.com/page, not /page)| Scenario | Use |
|---|---|
| Page should never appear in search | noindex |
| Duplicate page, prefer another version | canonical to preferred version |
| URL parameter variants | canonical to clean URL |
| Paginated content | Self-referencing canonical on each page |
MCP Tools: analyze_sitemap validates structure, gsc_sitemaps checks submission status.
Google's page experience signals. Measured from real user data (CrUX) and lab data (Lighthouse).
| Metric | Good | Needs Improvement | Poor |
|---|---|---|---|
| LCP (Largest Contentful Paint) | ≤ 2.5s | ≤ 4.0s | > 4.0s |
| INP (Interaction to Next Paint) | ≤ 200ms | ≤ 500ms | > 500ms |
| CLS (Cumulative Layout Shift) | ≤ 0.1 | ≤ 0.25 | > 0.25 |
Largest Contentful Paint measures when the largest visible element finishes rendering.
Common causes of poor LCP:
preloadQuick wins:
<link rel="preload" href="hero.webp" as="image">Interaction to Next Paint measures responsiveness to user input.
Common causes of poor INP:
requestAnimationFrameCumulative Layout Shift measures visual stability.
Common causes of poor CLS:
width and heightaspect-ratio or min-heightfont-display: swap + preloadMCP Tool: check_core_web_vitals returns all metrics with specific optimization suggestions.
Beyond Core Web Vitals, overall page speed impacts user experience and crawl budget.
Cache-Control: max-age=31536000 for static assets)srcset)<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preload" href="/critical.css" as="style">
<link rel="prefetch" href="/next-page.html">
<link rel="dns-prefetch" href="https://analytics.example.com">
Google uses mobile-first indexing — the mobile version of your site is what gets indexed.
<meta name="viewport" content="width=device-width, initial-scale=1">MCP Tool: check_mobile_friendly evaluates all mobile usability factors.
Strict-Transport-Security: max-age=31536000; includeSubDomains| Issue | Impact | Fix |
|---|---|---|
| Mixed content | Medium | Update all resource URLs to HTTPS |
| Expired certificate | Critical | Renew SSL certificate immediately |
| HTTP pages indexed | High | 301 redirect HTTP → HTTPS + update canonical |
| Missing HSTS | Low | Add HSTS header |
| Code | Type | When to Use | SEO Impact |
|---|---|---|---|
| 301 | Permanent | URL changed permanently, content moved | Passes ~95% link equity |
| 302 | Temporary | Temporary move (A/B test, maintenance) | Does not pass link equity |
| 307 | Temporary (strict) | Same as 302 but preserves HTTP method | Does not pass link equity |
| 308 | Permanent (strict) | Same as 301 but preserves HTTP method | Passes link equity |
/sitemap.xml (or referenced in robots.txt)<lastmod> with accurate dates (ISO 8601)<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/page</loc>
<lastmod>2026-01-15</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
MCP Tool: analyze_sitemap parses, validates, and reports issues.
For multi-language or multi-region sites. Tells Google which language/region version to show.
<link rel="alternate" hreflang="en-us" href="https://example.com/page">
<link rel="alternate" hreflang="en-gb" href="https://example.co.uk/page">
<link rel="alternate" hreflang="es" href="https://example.com/es/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
| Code | Meaning | SEO Action |
|---|---|---|
| 200 | OK | Expected for all indexable pages |
| 301 | Moved Permanently | Passes link equity. Use for permanent URL changes |
| 302 | Found (Temporary) | Does NOT pass link equity. Use only for temporary moves |
| 304 | Not Modified | Good — efficient caching |
| 404 | Not Found | Remove from sitemap, fix internal links pointing here |
| 410 | Gone | Permanently removed. Stronger signal than 404 for deindexing |
| 500 | Server Error | Fix immediately — blocks crawling and indexing |
| 503 | Service Unavailable | Temporary. Google retries. Use for planned maintenance |
Recommended order for a complete technical audit:
analyze_robots_txt → check for blocking issuesanalyze_sitemap → validate structure and URLsanalyze_page → meta robots, canonical, redirects, statuscheck_core_web_vitals → LCP, INP, CLS scorescheck_mobile_friendly → viewport, tap targets, fontsextract_schema → structured data validationgsc_index_coverage → real indexing status from GoogleSee ERROR_CATALOG.md for the complete issue catalog. See AUDIT_WORKFLOW.md for detailed audit methodology. See HTTP_STATUS_REFERENCE.md for complete status code reference.
Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.