.agents/skills/seo/SKILL.md
# SEO Skill — AuditKit This skill is auto-included in the generated ZIP when the SEO pillar score is below 90. ## Critical Requirements Every page MUST have: - `<title>` tag (50–60 characters) - `<meta name="description">` (120–158 characters) - `<link rel="canonical">` pointing to the preferred URL - At least one `<h1>` tag ## Meta Tags Checklist ```html <head> <!-- Required --> <title>Page Title — Site Name</title> <meta name="description" content="120–158 char description of this s
npx skillsauth add nirholas/auditkit .agents/skills/seoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill is auto-included in the generated ZIP when the SEO pillar score is below 90.
Every page MUST have:
<title> tag (50–60 characters)<meta name="description"> (120–158 characters)<link rel="canonical"> pointing to the preferred URL<h1> tag<head>
<!-- Required -->
<title>Page Title — Site Name</title>
<meta name="description" content="120–158 char description of this specific page.">
<link rel="canonical" href="https://yourdomain.com/page">
<!-- Open Graph (required for social sharing) -->
<meta property="og:title" content="Page Title">
<meta property="og:description" content="Description">
<meta property="og:image" content="https://yourdomain.com/og-image.png">
<meta property="og:url" content="https://yourdomain.com/page">
<meta property="og:type" content="website">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Page Title">
<meta name="twitter:description" content="Description">
<meta name="twitter:image" content="https://yourdomain.com/og-image.png">
</head>
// app/page.tsx
import type { Metadata } from 'next'
export const metadata: Metadata = {
title: 'Page Title — Site Name',
description: '120–158 char description.',
alternates: {
canonical: 'https://yourdomain.com/page',
},
openGraph: {
title: 'Page Title',
description: 'Description',
images: [{ url: '/og-image.png', width: 1200, height: 630 }],
},
twitter: {
card: 'summary_large_image',
title: 'Page Title',
description: 'Description',
images: ['/og-image.png'],
},
}
# public/robots.txt
User-agent: *
Allow: /
# Allow AI crawlers
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: Google-Extended
Allow: /
Sitemap: https://yourdomain.com/sitemap.xml
// app/sitemap.ts (Next.js)
import type { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap {
return [
{ url: 'https://yourdomain.com', lastModified: new Date(), changeFrequency: 'weekly', priority: 1 },
// add all pages
]
}
| Issue | Fix |
|-------|-----|
| Missing <title> | Add <title> to every page's <head> |
| Duplicate titles | Each page needs a unique, descriptive title |
| Title too long (>60 chars) | Truncate — search engines will cut it anyway |
| No OG image | Create a 1200×630 image for each key page |
| Missing canonical | Add <link rel="canonical"> or use Next.js metadata |
| No sitemap | Generate /sitemap.xml and submit to Google Search Console |
| Blocked in robots.txt | Ensure Allow: / is present |
development
# Structured Data Skill — AuditKit This skill is auto-included in the generated ZIP when the Structured Data pillar score is below 90. Structured data (Schema.org JSON-LD) helps search engines and AI systems understand your content type — enabling rich results in Google Search and better AI discoverability. --- ## JSON-LD Basics Always use `application/ld+json` script tags in `<head>`. Never use Microdata or RDFa (JSON-LD is the recommended format per Google). ```html <script type="applica
development
# Security Skill — AuditKit This skill is auto-included in the generated ZIP when the Security pillar score is below 90. ## HTTP Security Headers Add all of these to every response. Vercel users: add to `vercel.json`. Next.js users: add to `next.config.ts`. ### next.config.ts ```typescript const securityHeaders = [ { key: 'Strict-Transport-Security', value: 'max-age=63072000; includeSubDomains; preload', }, { key: 'Content-Security-Policy', value: [ "default-src
development
# Performance Skill — AuditKit This skill is auto-included in the generated ZIP when the Performance pillar score is below 90. ## What it covers Core Web Vitals (LCP, CLS, TBT/FID, FCP, TTFB, Speed Index) and general page weight / render-blocking resource issues. ## Thresholds (Google's "good" targets) | Metric | Good | Needs Improvement | Poor | |--------|------|-------------------|------| | LCP (Largest Contentful Paint) | < 2.5s | 2.5–4s | > 4s | | CLS (Cumulative Layout Shift) | < 0.1 |
tools
# AI Readiness Skill — AuditKit This skill is auto-included in the generated ZIP when the AI Readiness pillar score is below 90. AI Readiness measures how discoverable and usable your project is by AI coding agents, LLM crawlers, and vibe-coders who ask their AI about your tool. --- ## llms.txt The `llms.txt` standard (https://llmstxt.org) is a Markdown file at your domain root that gives LLMs context about your project — like `robots.txt` but for AI. ``` # YourProject > One-sentence desc