# SEO Elements Checklist

Comprehensive reference of SEO elements the scraper extracts and analyzes.
Use this when reviewing scraped data or building new pages based on scraped sites.

## On-Page SEO Elements

### Title Tag
- **Ideal length**: 30–60 characters
- **Best practices**: Primary keyword near the start, brand name at the end, unique per page
- **Common patterns**: "Primary Keyword — Secondary Keyword | Brand"

### Meta Description
- **Ideal length**: 120–160 characters
- **Best practices**: Compelling call-to-action, includes target keyword naturally, unique per page
- **Note**: Google may rewrite this, but having a good one increases CTR

### Heading Hierarchy (H1–H6)
- **Rules**: One H1 per page, no skipped levels (H1 → H3 without H2 is bad)
- **Best practices**: H1 matches/relates to title tag, subheadings use target + related keywords
- **SEO signal**: Heading structure tells search engines about content organization

### URL Structure
- **Best practices**: Short, descriptive slugs with keywords, hyphens not underscores
- **Avoid**: Query parameters for main content, deep nesting (>3 levels), dates in URLs (unless news)
- **Pattern**: `/category/subcategory/page-name`

### Canonical URL
- **Purpose**: Tells search engines which version of a page is the "official" one
- **Required when**: Multiple URLs serve the same/similar content, pagination, HTTP vs HTTPS

## Social & Sharing

### Open Graph (og:*)
- `og:title` — Title for social shares
- `og:description` — Description for social shares
- `og:image` — Image shown in social cards (1200×630px recommended)
- `og:url` — Canonical URL for the share
- `og:type` — Content type (website, article, product, etc.)
- `og:site_name` — Website name

### Twitter Card
- `twitter:card` — Card type (summary, summary_large_image, player, app)
- `twitter:title` — Title override for Twitter
- `twitter:description` — Description override
- `twitter:image` — Image override (2:1 aspect ratio for large image)

## Structured Data (Schema.org)

### JSON-LD (Preferred)
```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "...",
  "author": {...},
  "datePublished": "..."
}
</script>
```

### Common Types
- **Organization** — Company info, logo, social profiles
- **WebSite** — Sitelinks search box
- **Article/BlogPosting** — News and blog content
- **Product** — E-commerce product pages (price, availability, reviews)
- **BreadcrumbList** — Navigation breadcrumbs
- **FAQ** — Question and answer pairs
- **LocalBusiness** — Physical location info
- **HowTo** — Step-by-step instructions
- **Review/AggregateRating** — Star ratings in SERPs
- **Event** — Event details with dates/location
- **VideoObject** — Video rich results

## Technical SEO

### Performance Signals
- **Viewport meta**: Required for mobile-friendliness
- **Image dimensions**: Explicit width/height prevents layout shift (CLS)
- **Lazy loading**: `loading="lazy"` on below-fold images
- **Font display**: `font-display: swap` prevents invisible text
- **Script loading**: `async` or `defer` on non-critical scripts
- **Resource hints**: `preconnect`, `preload`, `prefetch` for critical resources

### Crawlability
- **robots.txt**: Controls what search engines can access
- **Meta robots**: Per-page index/noindex, follow/nofollow directives
- **XML Sitemap**: Helps search engines discover all pages
- **Hreflang**: International targeting (multiple languages/regions)

### Content Quality Signals
- **Word count**: 300+ words for meaningful pages, 1000+ for in-depth content
- **Internal linking**: Cross-link related pages with descriptive anchor text
- **External linking**: Link to authoritative sources (use nofollow/sponsored when appropriate)
- **Image alt text**: Descriptive, includes keywords naturally, not keyword-stuffed

## Scraper Output → Mockup Workflow

When using scraped SEO data to build new pages:

1. **Copy the meta tag patterns** — Title format, description style, OG tags
2. **Replicate the heading structure** — Same H1-H6 hierarchy for similar page types
3. **Match the structured data** — Use the same schema types on equivalent pages
4. **Preserve the internal linking pattern** — Similar number and placement of internal links
5. **Apply the same technical optimizations** — Script loading strategy, resource hints, lazy loading
6. **Use the URL structure as a template** — Same slug patterns for new content
