Skip to content
Back to skills

Seo Checklist

ASecurity

SEO and GEO (Generative Engine Optimization) checklist for web projects. Load when reviewing page metadata, structured data, technical SEO, Core Web Vitals, and generative-engine optimization. Covers classic search visibility and LLM-crawler optimization.

  • 8 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 3, 2026
ai-agentsjavascripttypescriptrustgojavareactnextjsdatabase

Works with

  • cli

Security analysis

A100/100

Scanned October 3, 2026

npx -y skills add ek33450505/claude-agent-team --skill seo-checklist --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Seo Checklist?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Seo Checklist
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ek33450505-seo-checklist/badge)](https://www.skillsdirectory.com/skills/ek33450505-seo-checklist)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: seo-checklist
description: SEO and GEO (Generative Engine Optimization) checklist for web projects. Load when reviewing page metadata, structured data, technical SEO, Core Web Vitals, and generative-engine optimization. Covers classic search visibility and LLM-crawler optimization.
user-invocable: false
allowed-tools: []
---

# SEO & GEO Checklist

## Metadata Basics

- **Page `<title>`:** Unique, descriptive, ≤60 characters (fits Google SERP). For React/Next: use dynamic `<title>` tag or Next.js `metadata` export.
- **Meta description:** 120–160 characters, clearly summarizes page value. Should answer "why visit this page?"
- **Canonical URL:** Prevents duplicate-content penalties. Set `<link rel="canonical" href="...">` or via Next.js `metadata.metadataBase`.
- **Open Graph tags:** For social sharing and preview cards. Include `og:title`, `og:description`, `og:image` (1200×630 px recommended), `og:url`, `og:type`.
- **Twitter Card tags:** `twitter:card`, `twitter:title`, `twitter:description`, `twitter:image` for Twitter/X sharing preview.

## Structured Data (JSON-LD)

- **Format:** Use JSON-LD in `<script type="application/ld+json">` blocks (preferred by both Google and modern LLM crawlers).
- **Schema types:** Choose applicable types: `Organization` (company info), `Article` (blog posts/news), `Product` (e-commerce), `BreadcrumbList` (site navigation), `FAQPage` (Q&A content).
- **Why it matters:** Enables Google rich results (star ratings, recipes, job listings) AND helps LLM crawlers understand semantic structure for more accurate citations/excerpts.
- **Validation:** Test with [schema.org](https://schema.org) examples and Google's Rich Results Test.

## Technical SEO

- **Sitemap.xml:** Submit to search engines via robots.txt or Search Console. For Next.js: use `next-sitemap` or manually generate and serve from `/public/sitemap.xml`.
- **robots.txt:** Define crawl budget and disallowed paths. Basic rule: `User-agent: *` + `Allow: /`. For Vercel: robots.txt auto-generated; check `/robots.txt`.
- **Semantic HTML:** Single `<h1>` per page, no skipped heading levels (h1 → h2/h3, not h1 → h4). Use `<header>`, `<main>`, `<nav>`, `<article>`, `<section>` landmark elements. Overlaps with accessibility-first HTML — see `typescript-conventions` Accessibility section.
- **Duplicate content:** Avoid multiple URLs serving identical content. Use canonical tags to point to preferred version.
- **Index coverage is a separate question:** Everything above is "is the page well-formed". Whether a URL is actually *in* Google's index — and why not — is diagnosed differently: `Discovered – currently not indexed` is a crawl-budget signal, `Crawled – currently not indexed` is a content-quality verdict, and only GSC URL Inspection reports either. For that, plus the inspection quota arithmetic, stratified sampling, sitemap segmentation for per-family coverage, and the soak-window rule, load `seo-index-census`.

## Core Web Vitals (CWV)

Target thresholds (Google's metric for rank/user experience):
- **LCP (Largest Contentful Paint):** ≤2.5s. Optimized images, preload critical resources.
- **INP (Interaction to Next Paint):** ≤200ms. Break long JavaScript tasks, defer non-critical work.
- **CLS (Cumulative Layout Shift):** ≤0.1. Reserve space for late-loading fonts/ads, set image dimensions.

Common React/Vite culprits:
- Unoptimized images (use `<img>` with `width`/`height` or lazy-load). In Next.js, use `next/image` for automatic optimization.
- Late-loading web fonts (specify `font-display: swap` or preload via `<link rel="preload">`).
- JavaScript bundle size; code splitting with dynamic imports for route-based or intersection-observer-based chunks.
- Hydration cost on initial page load (minimize render work in client-side React, consider streaming SSR).

## GEO (Generative Engine Optimization)

- **llms.txt:** An emerging convention (not universally adopted yet) analogous to robots.txt for AI crawlers. Place at `/.well-known/llms.txt` or `/llms.txt`. Specifies which content is quotable/extractable and any usage policies. Example: `Allow: /blog/*` (LLMs may cite blog posts). Check [llms.txt specification](https://llmstxt.org) for current status before relying on it.
- **Quotable content:** Structure facts and claims clearly near the top of the page. LLMs prioritize declarative, extractable statements over marketing fluff. Avoid burying key information in prose; use lists, tables, or Q&A formats.
- **Q&A sections:** Direct question-answer content maps well to LLM-answer-engine excerpting. Pair each Q with a concise A. Markup with `<dl>` + schema `FAQPage` or `QAPage` JSON-LD for best results.
- **Byline and metadata:** Attribution, publication date, author expertise signals improve trustworthiness in LLM citations.

## Next.js-Specific

- **Metadata export:** Use Next.js 13+ `metadata` export in `page.tsx` instead of HTML `<meta>` tags.
  ```typescript
  export const metadata: Metadata = {
    title: "Page Title",
    description: "Page description",
    openGraph: { title: "...", description: "...", images: [{ url: "..." }] },
  };
  ```
- **Sitemap and robots.txt:** Auto-generated by Next.js. Customize in `app/sitemap.ts` and `app/robots.ts` (App Router).
- **next/image:** Always use for images to enable automatic format negotiation, responsive sizing, and lazy-loading (improves CWV).
- **Dynamic routes:** If using `generateStaticParams()`, ensure all variants are covered for SEO discoverability.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.