On-Page SEO for SaaS
On-page SEO is the optimization of individual pages to rank higher and earn more relevant traffic. It covers everything on the page itself: title tags, meta descriptions, headers, content structure, internal linking, page speed, and structured data. On-page SEO is the foundation. No amount of backlinks or domain authority compensates for a page that Google can't understand.
The principle: on-page SEO is about clarity, not tricks. Tell Google exactly what the page is about, structure the content so users find what they need, and make the page fast and accessible. Every optimization should serve both the user and the search engine.
The On-Page SEO Checklist
Elements to optimize
| Element |
What to optimize |
Priority |
| Title tag |
Primary keyword + modifier. 50-60 characters |
P0 |
| Meta description |
Compelling summary with keyword. 150-160 characters |
P0 |
| H1 |
One H1 per page. Includes primary keyword |
P0 |
| URL |
Short, keyword-rich, lowercase, hyphens |
P0 |
| H2-H3 structure |
Logical hierarchy. Secondary keywords in H2s |
P1 |
| First 100 words |
Primary keyword in the first paragraph |
P1 |
| Internal links |
3-5 internal links to related pages |
P1 |
| Image alt text |
Descriptive, keyword-relevant where natural |
P1 |
| Page speed |
Under 2 seconds load time |
P1 |
| Schema markup |
FAQ, Article, Product, or DefinedTerm as relevant |
P2 |
| External links |
1-2 links to authoritative sources |
P2 |
| Content length |
Matches or exceeds top-ranking competitors |
P2 |
Title Tag Optimization
Title tag formula
[Primary Keyword] [Modifier] | [Brand]
Examples:
"Best Cold Email Tools (2025 Comparison) | Acme"
"Pipeline Coverage Ratio: Formula + Benchmarks | Acme"
"HubSpot vs Salesforce: Which CRM in 2025? | Acme"
Title tag rules
- 50-60 characters. Google truncates after ~60 characters. Keep the important information front-loaded
- Primary keyword first. "Cold Email Subject Lines: 15 Patterns" not "15 Patterns for Writing Better Cold Email Subject Lines." Front-load the keyword
- Include a modifier. Year (2025), format (guide, comparison, template), number (10 best, 15 patterns). Modifiers capture long-tail variations
- Brand at the end. "[Keyword] | [Brand]" puts the keyword first and the brand last. The keyword is what the searcher typed. It should be first
- Unique per page. No two pages should have the same title tag. Duplicate titles confuse Google about which page to rank
Good vs bad title tags
| Good |
Bad |
Why bad |
| "Best CRM for Startups (2025) | Acme" |
"Acme - The Best CRM Platform" |
Brand first, no specificity |
| "Pipeline Coverage Ratio: Formula + Targets" |
"Understanding Your Pipeline" |
No keyword, too vague |
| "HubSpot vs Salesforce: Honest Comparison" |
"CRM Comparison Page" |
Generic, no brand names |
| "Cold Email Subject Lines: 15 Patterns That Work" |
"Subject Lines" |
Too short, no context |
Meta Description
Meta description formula
[What the page covers] + [why to click] + [call to action]
Examples:
"Compare the 10 best cold email tools for B2B SaaS.
We tested each one. See pricing, features, and which
tool fits your outbound motion."
"Pipeline coverage ratio formula, benchmarks by ACV,
and how to set targets. Includes a calculator."
Meta description rules
- 150-160 characters. Google truncates after ~160. Front-load the value proposition
- Include the primary keyword. Google bolds the matching query terms. Bolded terms catch the eye in search results
- Write for the click, not for SEO. The meta description doesn't directly affect rankings. It affects click-through rate. Write copy that makes the searcher want to click your result over the others
- No duplicate descriptions. Unique per page. If you can't write a unique description, the page might not be unique enough
Header Structure
Proper header hierarchy
H1: Primary topic (one per page)
H2: Major section 1
H3: Subsection
H3: Subsection
H2: Major section 2
H3: Subsection
H2: Major section 3
Header rules
- One H1 per page. The H1 is the page title. It should include the primary keyword. Never use multiple H1 tags
- H2s are section headers. Each major section gets an H2. Include secondary keywords naturally in H2 text
- H3s are subsections. Use H3s under H2s for subtopics. Don't skip levels (H1 → H3 without H2)
- Headers should make sense as a table of contents. If you extract all headers from the page, they should tell a coherent story about the page's content. If they don't, restructure
Content Optimization
Content rules
- Primary keyword in the first 100 words. Google pays attention to early content. Mention the primary keyword naturally in the opening paragraph
- Semantic keywords throughout. Don't stuff the exact keyword 50 times. Use related terms. For "cold email tools": "outbound email software," "sales engagement platform," "email sequencing tool." Google understands synonyms
- Match search intent. If the top 5 results for your keyword are comparison articles, write a comparison. If they're how-to guides, write a how-to. Matching intent is the single biggest ranking factor
- Content length matches or exceeds competition. If the top 3 results are 2,000 words, a 500-word page won't rank. Check competitor length and match or exceed it where depth is warranted
- No keyword stuffing. If the primary keyword appears more than 1-2% of total words, it's stuffed. Write naturally. Google penalizes obvious stuffing
- Break up text. Short paragraphs (2-3 sentences). Bullet points. Tables. Scannable content retains readers and reduces bounce rate. Long paragraphs drive users away
Internal Linking
Internal linking rules
| Rule |
How to implement |
| 3-5 internal links per page |
Link to related pages with descriptive anchor text |
| Contextual placement |
Links within body content, not just navigation |
| Descriptive anchor text |
"pipeline coverage ratio" not "click here" or "learn more" |
| Link to high-priority pages |
Product pages, use case pages, and comparison pages |
| Reverse linking |
When you publish a new page, add links FROM existing pages TO the new page |
Internal linking mistakes
| Mistake |
Fix |
| All links in the footer |
Move links into body content where they're contextually relevant |
| Generic anchor text ("click here") |
Use descriptive text that tells users and Google what the linked page is about |
| No reverse linking |
When you add a new page, find 3-5 existing pages that should link to it and add the links |
| Orphan pages |
Every page must have at least 1 internal link pointing to it. Check for orphans monthly |
Page Speed
Speed targets
| Metric |
Target |
Tool |
| Largest Contentful Paint (LCP) |
< 2.5 seconds |
Google PageSpeed Insights |
| First Input Delay (FID) |
< 100 milliseconds |
Google PageSpeed Insights |
| Cumulative Layout Shift (CLS) |
< 0.1 |
Google PageSpeed Insights |
| Total page load time |
< 2 seconds |
WebPageTest |
Speed optimization rules
- Compress images. Use WebP format. Lazy-load below-the-fold images. Images are typically 60-70% of page weight
- Minimize JavaScript. Defer non-critical JS. Remove unused JS. Every kilobyte of JS adds to parse and execution time
- Use a CDN. Serve static assets from edge locations. Reduces latency for users far from your server
- Above-the-fold content loads first. The hero section should render before below-fold images and scripts. Use critical CSS
Schema Markup
Schema types for SaaS pages
| Page type |
Schema type |
What it enables |
| Blog post / guide |
Article |
Rich snippet with author, date, headline |
| FAQ section |
FAQPage |
FAQ accordion in search results |
| Glossary entry |
DefinedTerm |
Definition rich snippet |
| Product page |
Product |
Price, availability, review rich snippet |
| Comparison page |
No specific schema |
Use FAQPage for comparison FAQs |
| Listicle |
ItemList |
List items in search results |
Measurement
| Metric |
Definition |
Target |
Frequency |
| Organic traffic |
Monthly visits from search |
Growing month-over-month |
Monthly |
| Keyword rankings |
Position for target keywords |
Top 10 for primary, top 20 for secondary |
Weekly |
| Click-through rate |
Clicks / impressions from Search Console |
> 3% average |
Monthly |
| Bounce rate |
% leaving without interaction |
< 65% |
Monthly |
| Core Web Vitals |
LCP, FID, CLS scores |
All "good" in PageSpeed Insights |
Monthly |
| Pages indexed |
Total pages indexed vs published |
> 95% |
Monthly |
| Internal link coverage |
% of pages with 3+ internal links |
> 90% |
Quarterly |
Pre-Publish Checklist
- [ ] Title tag: 50-60 characters, primary keyword front-loaded, modifier included
- [ ] Meta description: 150-160 characters, includes keyword, written for clicks
- [ ] One H1 per page with primary keyword
- [ ] URL is short, lowercase, hyphenated, keyword-rich
- [ ] Primary keyword in first 100 words
- [ ] H2s include secondary keywords naturally
- [ ] 3-5 internal links with descriptive anchor text
- [ ] Images have descriptive alt text
- [ ] Content length matches or exceeds top-ranking competitors
- [ ] Page loads in under 2 seconds
- [ ] Schema markup implemented (FAQ, Article, or other as relevant)
- [ ] Search intent matches top-ranking results for the target keyword
- [ ] No duplicate title tag or meta description with another page
- [ ] Mobile-friendly (responsive, no horizontal scroll)
Anti-Pattern Check
- Keyword stuffing. The phrase "best cold email tools" appears 25 times in a 1,500-word article. That's 1.7%. Google recognizes this as stuffing. Use the exact keyword 3-5 times naturally. Use semantic variations for the rest
- Same title tag on multiple pages. /blog/cold-email-tips and /guides/cold-email-tips both have the title "Cold Email Tips." Google can't distinguish them. One will be suppressed. Unique titles per page
- Ignoring search intent. The top 5 results for "pipeline coverage" are calculators and formulas. You publish a thought leadership essay. It won't rank. Match the format and intent of what's already ranking
- No internal links. A new blog post is published with zero internal links. It exists in isolation. Google can't discover it efficiently. Other pages can't pass authority to it. Add 3-5 internal links on publish day
- Page speed ignored. The page scores 35/100 on PageSpeed Insights. Images are 5MB. JavaScript loads 3 tracking scripts before content. Core Web Vitals are "poor." Fix the technical foundation before optimizing content
- No meta description. Google generates one from page content. It's usually bad. A well-written meta description improves CTR by 5-10%. Write one for every page
- H1 is the company name on every page. Every page's H1 is "Acme Inc." Google sees every page as being about "Acme Inc." The H1 should be the page's primary topic. The company name goes in the title tag suffix