On-page SEO checklist
📖 5 min readUpdated 2026-04-18
Use this checklist on every new page before publishing, and on every content refresh. Covers the on-page optimization work that actually moves rankings.
Strategy
- [ ] Primary keyword + intent identified
- [ ] Target cluster documented (primary keyword + 2-5 supporting)
- [ ] Top 5 competitors analyzed (format, structure, depth, gaps)
- [ ] Angle that differentiates this page from competitors identified
Title tag
- [ ] Primary keyword near the front
- [ ] Under 60 characters
- [ ] Promises value / earns click
- [ ] Brand at end (if applicable)
- [ ] Unique vs, other pages on the site
Meta description
- [ ] 150-160 characters
- [ ] Primary keyword included naturally
- [ ] One-sentence unique value prop
- [ ] Subtle CTA
- [ ] Not duplicate of title tag
URL
- [ ] Short (<60 characters)
- [ ] Primary keyword in slug
- [ ] Hyphenated, lowercase
- [ ] No query strings or IDs
- [ ] Folder structure consistent with site
Headings
- [ ] One H1 with primary keyword
- [ ] H2s for each major section (3-8 per page typical)
- [ ] Primary keyword or variation in at least one H2
- [ ] PAA questions included as H2s where relevant
- [ ] H3s used for sub-sections (not for styling)
- [ ] Hierarchy doesn't skip levels
Content
- [ ] Primary keyword in first 100 words (natural)
- [ ] Supporting/semantic keywords woven throughout
- [ ] Direct answer to the query in the first section
- [ ] Depth matches the top 5 competitors' average (+/- 20%)
- [ ] No padding or filler
- [ ] Original examples, data, or screenshots included
- [ ] Author bio with credentials visible
- [ ] External links to 2-4 authoritative sources
- [ ] FAQ section covering PAA questions
Images
- [ ] All images have descriptive alt text
- [ ] File names are hyphenated + descriptive
- [ ] WebP or AVIF format (or justified alternative)
- [ ] Compressed (photos <200KB, illustrations <100KB)
- [ ] Responsive srcset for key images
- [ ] Width + height attributes set
- [ ] Lazy-load below-the-fold images
- [ ] Hero image is NOT lazy-loaded
Internal linking
- [ ] 3-10 internal links to related content
- [ ] Descriptive anchor text (not "click here")
- [ ] Link to at least one pillar page / hub
- [ ] This page linked from at least one high-authority page
Schema markup
- [ ] Article (or appropriate type) schema in JSON-LD
- [ ] Author, datePublished, dateModified, image populated
- [ ] Passes Rich Results Test
- [ ] BreadcrumbList schema if on a deep URL
Technical
- [ ] Canonical tag set (self-canonical for most pages)
- [ ] No unintended noindex
- [ ] Page loads <2.5s LCP
- [ ] Mobile-responsive design
- [ ] HTTPS
Post-publish
- [ ] Submitted via Search Console (or waits for crawl)
- [ ] Internal links from other pages added
- [ ] Social share hooks set (OG image, Twitter card)
- [ ] Tracked in analytics
- [ ] Calendar reminder set for 90-day performance review