On-page SEO is the part of SEO you have complete control over. No outreach, no relationships, no waiting on other people. Every item on this list is something you can fix today on your own site.
I use this exact checklist before publishing any page worth ranking. Work through it in order — the items at the top have the most impact.
Content and Keyword Fundamentals
1. Target One Primary Keyword Per Page
Each page should be optimized for one primary search term (and its semantic variants). Targeting multiple competing keywords on a single page dilutes focus. If you have content that could rank for two different intents, consider whether they deserve separate pages.
2. Match Search Intent Precisely
This is the single most important on-page factor. Google classifies intent into four types: informational ("how to..."), navigational ("brand name"), transactional ("buy..."), and commercial investigation ("best X for Y"). Your content must match the intent for your target keyword — not just include the keyword. A transactional page trying to rank for an informational query won't work no matter how well-optimized it is.
3. Include the Keyword in the First 100 Words
Not for keyword density reasons (that's a 2012 concern), but because it signals to both users and crawlers what the page is about, immediately.
Title and Meta
4. Title Tag: Keyword-First, 50-60 Characters
Include your target keyword as early as possible in the title. Keep it under 600px (roughly 55-60 characters with standard fonts). Every additional character after that gets truncated.
Good: "Keyword Research Guide: How to Find Keywords That Drive Traffic"
Bad: "The Ultimate Complete Definitive Keyword Research Guide for SEO"
5. Meta Description: 120-155 Characters, Action-Oriented
Write meta descriptions that earn the click. Include the keyword, lead with value, and add a soft call to action. Google rewrites about 70% of meta descriptions, but yours will be used by Bing, social platforms, and AI citation systems.
6. Open Graph Tags
Required for clean social sharing. At minimum set og:title, og:description, and og:image. The image should be 1200x630px. Without OG tags, social platforms will guess — usually badly.
<meta property="og:title" content="Your Title" />
<meta property="og:description" content="Your description" />
<meta property="og:image" content="https://yourdomain.com/og-image.jpg" />
URL and Structure
7. URL: Short, Keyword-Rich, Hyphen-Separated
Good: /keyword-research-guide/
Bad: /blog/2024/11/23/the-complete-guide-to-doing-keyword-research-effectively/
Keep URLs under 60 characters if possible. Remove stop words (the, a, an, of). Use hyphens, never underscores.
8. Single H1 Tag with the Target Keyword
One H1 per page, placed near the top, containing the primary keyword. The H1 doesn't need to be identical to your title tag — it often shouldn't be. Use H2/H3 for subheadings, following a logical hierarchy.
9. Canonical Tag
Every page should have a self-referencing canonical tag, even if there's no obvious duplicate issue. This prevents problems when URLs are shared with tracking parameters:
<link rel="canonical" href="https://yourdomain.com/your-page/" />
Internal Links
10. Link to 3-5 Relevant Pages Within Your Site
Internal links distribute PageRank, help Google understand your site structure, and keep users engaged longer. Use descriptive anchor text, not "click here." Every new piece of content should link to at least three other pages.
11. Update Existing Pages to Link Back
When you publish new content, go back to your most relevant existing pages and add a link to the new one. New pages with no internal links get discovered slowly and often rank poorly. This is a step most people skip.
Images
12. Descriptive Alt Text on Every Image
Alt text is read by screen readers (accessibility requirement) and crawled by search engines. Describe what's in the image, naturally including keywords where they fit. Don't keyword-stuff: "keyword keyword SEO keyword" as alt text is worse than nothing.
13. Next-Gen Image Format (WebP/AVIF) and Compression
Uncompressed images are the most common cause of slow LCP times. Convert images to WebP (or AVIF for modern browsers), compress without visible quality loss, and set explicit width/height attributes to prevent CLS.
14. Descriptive File Names
keyword-research-example.webp is better than IMG_20240923_14523.jpg. File names are a minor signal but a free one.
Technical On-Page
15. Page Loads in Under 3 Seconds on Mobile
Check with our Website Speed Test. Mobile is what Google measures. Desktop scores are irrelevant if your mobile LCP is 5 seconds.
16. Mobile-Responsive Layout
This should be a given in 2025, but I still see it fail on older WordPress sites and custom-built pages. Test on actual mobile devices, not just Chrome DevTools resize mode. The tap target sizes matter more than most people realize.
17. No Broken Links
Broken outbound links waste crawl budget and frustrate users. Run a crawl with Screaming Frog or use our link checker before and after publishing. Don't just check on publish day — links break over time.
Schema and Rich Snippets
18. Article/BlogPosting Schema with Author and Date
For blog content, structured data with datePublished, dateModified, and author (with sameAs linking to their social/bio) strengthens E-E-A-T signals for both Google and AI systems.
19. FAQPage Schema for Content With Q&A Sections
If your page has a FAQ section (and it should), add FAQPage schema. This is consistently one of the highest-ROI structured data implementations for both rich results and AI citation rates.
20. Validate All Schema Before Publishing
Use Google's Rich Results Test to check for errors. A single JSON syntax error silently kills your entire schema implementation. Use our Schema Markup Generator to create error-free code without manual JSON editing.
Quick Pre-Publish Check
Before hitting publish, run through these in 5 minutes:
- Title under 60 chars, keyword included
- Meta description 120-155 chars, action-oriented
- One H1, keyword present
- Canonical tag set
- OG tags configured
- All images have alt text
- Mobile loads in under 3s
- 3-5 internal links added
- Schema validated
None of these take long individually. The discipline is doing all of them every time, not just for the "important" posts.