On-page SEO is the part of search optimisation that you have the most control over, and paradoxically, it’s the part most people get wrong. Not because the techniques are complicated, but because most guides present 30 or 40 factors as a flat checklist, as though optimising your alt text and getting your title tag right carry equal weight. They don’t.
After auditing hundreds of pages across competitive sectors, I can tell you that roughly 80% of on-page ranking impact comes from five or six elements. The remaining 20% comes from everything else combined. That doesn’t mean the smaller factors are worthless, but if you’re spending three hours perfecting image filenames while your title tags are generic and your content doesn’t match search intent, you’re optimising in the wrong order.
This article separates the high-impact on-page factors from the hygiene factors. I’ll explain what each element actually does, why it matters (or doesn’t), and how to prioritise your time. I’ll also cover a topic that most on-page guides skip entirely: SEO for single-page applications, because that’s an increasingly common scenario with its own set of constraints.
What On-Page SEO Actually Means
On-page SEO refers to everything you can optimise on the page itself to improve its search visibility. That includes the content, the HTML source code, and the way the page communicates its topic and intent to search engines. It’s distinct from technical SEO, which deals with site-wide infrastructure (crawlability, indexation, site speed), and off-page SEO, which covers external signals like backlinks.
The distinction matters because on-page and technical SEO overlap in ways that cause confusion. Core Web Vitals, for instance, are technically a page-level metric, but they’re determined by your server infrastructure, your CSS, your JavaScript, and your hosting, which makes them a technical SEO concern that happens to manifest on individual pages. I’ll touch on those overlaps where they’re relevant.
The High-Impact Factors
These are the on-page elements that consistently make the biggest difference to rankings. If you’re short on time, focus here first.
Title Tags
The title tag is still the single most influential on-page HTML element for rankings. It tells search engines what the page is about, and it’s the clickable headline in search results that determines whether someone visits your page or scrolls past it.
What makes a good title tag:
- Includes your primary keyword naturally, ideally near the beginning. Not stuffed in awkwardly, but present. If your page is about kitchen renovations in Manchester, “Kitchen Renovations Manchester” should appear in recognisable form, not buried after “Our Amazing Award-Winning Services.”
- Stays under 60 characters (roughly) to avoid truncation in search results. Google measures by pixel width, not character count, so a title with lots of wide characters (W, M) will truncate sooner than one with narrow characters (i, l). Aim for 50-60 characters and you’ll be fine in most cases.
- Compelling enough to earn clicks. Rankings get you onto the page of results. The title tag determines whether anyone actually clicks. A title that reads like a keyword list will rank but won’t convert impressions into visits.
- Unique across your site. Every page needs its own title tag. Duplicate titles create confusion for search engines about which page to rank for a given query. I see this on almost every site I audit, particularly on e-commerce sites where product pages share templated titles.
Common mistakes: Generic titles (“Home,” “Services,” “Blog”), keyword-stuffed titles (“SEO Services | SEO Agency | SEO Consultant | Best SEO”), and titles that don’t match the page content. That last one is more damaging than people realise: if your title promises something the page doesn’t deliver, your bounce rate will punish you regardless of how well the title is optimised.
Content Quality and Search Intent Match
This is where most on-page guides get vague, because “write good content” isn’t actionable advice. Let me be more specific.
The most important thing your content can do is match the search intent behind the keyword you’re targeting. Search intent is what the person actually wants when they type a query. It’s not always obvious from the keywords alone, and getting it wrong means your page won’t rank regardless of how well everything else is optimised.
The four intent types:
- Informational: The searcher wants to learn something. (“what is on-page seo,” “how to write a meta description”)
- Commercial investigation: The searcher is researching options before a purchase. (“best SEO tools,” “Ahrefs vs Semrush”)
- Transactional: The searcher wants to buy or take a specific action. (“buy SEO audit,” “hire SEO consultant”)
- Navigational: The searcher wants a specific website. (“Moz blog,” “Google Search Console login”)
The quickest way to check intent is to Google your target keyword and look at what’s ranking. If the top ten results are all long-form guides, Google has determined that searchers want informational content. If the top results are product pages or service pages, the intent is transactional. Your page needs to match whatever format and depth Google is already rewarding.
I’ve seen pages that were technically perfect, great title tags, clean HTML, fast load times, fail to rank because they were a 3,000-word guide targeting a keyword where Google wanted a 500-word comparison table. Format matters as much as quality.
Content depth: Your content needs to cover the topic thoroughly enough that a searcher doesn’t need to go back to Google for a follow-up query. This doesn’t mean writing the longest article possible. It means covering the topic to the appropriate depth for the intent. Some queries need 5,000 words. Some need 500. The SERPs tell you which.
Heading Structure (H1, H2, H3)
Headings serve two purposes: they help users scan your content, and they help search engines understand the topical structure of your page.
The H1 tag should appear once per page and clearly describe what the page is about. It should include your primary keyword or a close variation. On most pages, the H1 is (or should be) the main visible title.
H2 tags define the major sections of your page. Think of them as chapter titles. Each H2 should cover a distinct subtopic within the page’s main theme. These are also prime real estate for secondary keywords and question-based variations. Google’s “People Also Ask” feature often pulls from content under clearly structured H2 headings.
H3 tags (and beyond) break down H2 sections into subsections. Use them when a section has genuinely distinct sub-points. Don’t use them for visual styling; that’s what CSS is for.
The mistake I see most often: Skipping heading levels (going from H1 straight to H3) or using headings purely for visual emphasis rather than semantic structure. Search engines read headings as a hierarchy. If your H3 appears outside of any H2, it’s an orphaned subsection that’s harder for Google to contextualise.
Internal Linking
Internal links are the most underrated on-page factor. They do three things simultaneously: they help users navigate between related content, they help search engines discover and understand the relationships between your pages, and they distribute link equity (ranking power) across your site.
How to do it well:
- Link from high-authority pages to pages that need a ranking boost. Your homepage and most-linked pages carry the most equity; links from these pages are worth more.
- Use descriptive anchor text that tells both users and Google what the linked page is about. “Click here” wastes an opportunity. “Our technical SEO audit process” is far more useful.
- Link contextually within your body copy, not just in navigation menus. Contextual links carry more weight because they’re surrounded by relevant content that reinforces the topical connection.
- Don’t overdo it. A page with 200 internal links dilutes the value of each one. Aim for links that genuinely help the reader find related information. If you wouldn’t click the link yourself, neither will anyone else.
The pages I see ranking most consistently are the ones with strong internal linking from related content. I’ve moved pages from page three to page one purely by fixing internal linking, without changing a single word of the content itself. That’s how powerful this factor is.
Meta Descriptions
Meta descriptions don’t directly influence rankings. Google has confirmed this repeatedly. But they significantly influence click-through rate, which does influence rankings indirectly. A well-written meta description can be the difference between a 2% and a 5% CTR, and over thousands of impressions, that compounds.
What works:
- 150-160 characters. Long enough to be informative, short enough to avoid truncation.
- Include the primary keyword. Google bolds matching terms in the search results, which draws the eye.
- Provide a clear value proposition: what will the searcher get from this page? Not a summary of the content, but a reason to click.
- Unique per page. Duplicate meta descriptions are almost as common as duplicate title tags, and equally wasteful.
The honest caveat: Google rewrites meta descriptions roughly 60-70% of the time, pulling text from the page that it considers more relevant to the specific query. This means your meta description is a suggestion, not a guarantee. Write it well anyway, because when Google does use it, it needs to work.
The Hygiene Factors
These elements matter, but their impact is smaller and more conditional. Get them right, but not at the expense of the high-impact factors above.
URL Structure
Clean, readable URLs are a minor ranking factor and a moderate user experience factor. example.com/services/seo-audits is better than example.com/page?id=47&cat=3 for both humans and search engines.
Best practices:
- Keep URLs short and descriptive
- Include your primary keyword where it fits naturally
- Use hyphens to separate words (not underscores)
- Avoid parameters, session IDs, and unnecessary folder depth
- Don’t change existing URLs unless you have a strong reason and a redirect plan
I’ll cover this in much more depth in a dedicated article on URL structure and SEO.
Image Optimisation
Images need alt text, reasonable file sizes, and descriptive filenames. The alt text should describe the image for accessibility purposes first and include relevant keywords second. “Photo of team” is poor. “Kitchen renovation project completed in Manchester showing new granite worktops” is better, assuming that’s what the image actually shows.
File size matters for page speed more than for SEO directly, but since page speed affects rankings (especially on mobile), compressing your images is worth doing. WebP format, lazy loading for below-the-fold images, and appropriate dimensions (don’t serve a 4000px image in a 400px container) are all good practice.
Schema Markup
Structured data doesn’t directly improve rankings, but it enables rich results (stars, FAQs, how-to steps, breadcrumbs) that significantly improve visibility and CTR in search results. The impact depends on the type of schema and whether Google chooses to display it.
For most pages, the relevant schema types are:
- Article (for blog posts and editorial content)
- FAQPage (for pages with genuine FAQ content)
- Product (for e-commerce product pages)
- LocalBusiness (for businesses serving specific geographic areas)
- BreadcrumbList (for navigation context)
I’ve written a detailed guide on YMYL schema markup if you’re in a regulated industry where structured data intersects with E-E-A-T requirements.
Keyword Placement Beyond the Title
After the title tag, keyword placement in the body content matters less than most people think. You don’t need an exact keyword density. You don’t need your keyword in the first 100 words (though it helps). You don’t need it in every heading.
What you do need is topical coverage. Search engines in 2026 understand semantic relationships between terms. If your page is about on-page SEO, Google expects to see related terms like title tags, meta descriptions, heading structure, internal linking, search intent, and content optimisation. A page that naturally covers the topic will naturally include these terms without forcing them.
The exception: your primary keyword should appear in the title tag, the H1, and somewhere in the first few paragraphs. Beyond that, write for the reader and the topical coverage will take care of itself.
Mobile Optimisation
Google uses mobile-first indexing, which means it predominantly uses the mobile version of your content for ranking and indexing. If your page looks and functions differently on mobile than on desktop, the mobile version is what Google sees.
This isn’t a specific “optimisation” so much as a design and development requirement. Responsive design, readable font sizes, tappable buttons with adequate spacing, and no content hidden behind tabs or accordions that might not be indexed properly. If your site was built in the last five years with any competent developer, this should already be in place. If it wasn’t, it’s a redesign conversation, not an on-page SEO tweak.
What Doesn’t Matter (As Much as People Claim)
I want to be honest about elements that get disproportionate attention relative to their actual impact.
Keyword Density
The concept of targeting a specific keyword percentage (2%, 3%, whatever the latest “optimal” figure is) has been outdated for years. Google’s algorithms understand natural language, synonyms, and topical relationships. Writing naturally and covering your topic thoroughly will produce appropriate keyword usage without counting percentages.
If anything, obsessing over keyword density leads to worse content. You end up with awkward repetition that reads like it was written for a search engine rather than a person. And Google’s helpful content system is explicitly designed to detect and demote content that prioritises search engines over users.
Meta Keywords
The meta keywords tag has been completely ignored by Google since at least 2009. It’s still present on a surprising number of sites I audit. If you’re spending time filling it in, stop. It does nothing. (Some people argue it helps competitors see your target keywords, which is technically true but practically irrelevant.)
Word Count as a Ranking Factor
Longer content doesn’t rank better because it’s longer. Longer content tends to rank better because it covers topics more thoroughly. The correlation is with comprehensiveness, not length. A 1,500-word page that perfectly addresses the search intent will outrank a 5,000-word page that pads its word count with tangentially related information.
Write until you’ve said everything the searcher needs to know. Then stop.
SEO for Single-Page Applications
This deserves its own section because it’s a fundamentally different challenge. If your website is built with a JavaScript framework (React, Angular, Vue, Next.js, Nuxt) as a single-page application (SPA), standard on-page SEO advice applies, but the implementation is more complicated.
The Core Problem
Traditional websites serve HTML directly from the server. Google receives the page, reads the content, indexes it. Simple.
Single-page applications render content in the browser using JavaScript. When Googlebot requests the page, it may receive a mostly empty HTML shell with a JavaScript bundle. Google then needs to execute that JavaScript to see the actual content. This process is called rendering, and while Google has improved dramatically at it, it introduces delays and potential failure points.
What this means in practice:
- Your content may not be indexed at all if JavaScript rendering fails
- There’s a delay between crawling and rendering (Google prioritises its rendering queue), which means new content takes longer to appear in search results
- JavaScript-heavy pages can have poor Core Web Vitals scores (large bundles, slow Time to Interactive, layout shifts during hydration)
The Solutions
Server-side rendering (SSR): The server executes the JavaScript and sends fully rendered HTML to the browser (and to Googlebot). This is the gold standard for SPA SEO. Frameworks like Next.js (React) and Nuxt (Vue) make this relatively straightforward. The trade-off is increased server complexity and cost.
Static site generation (SSG): Pages are pre-rendered at build time and served as static HTML. Excellent for content that doesn’t change frequently (blogs, documentation, marketing pages). Extremely fast, excellent for Core Web Vitals, and completely removes the rendering problem. The trade-off is that dynamic content requires workarounds.
Hybrid rendering: Most modern frameworks support a combination of SSR, SSG, and client-side rendering. Use SSR or SSG for pages that need to be indexed (your commercial pages, your blog, your landing pages) and client-side rendering for interactive application features that don’t need search visibility (dashboards, user accounts, internal tools).
Pre-rendering services: If you can’t implement SSR or SSG, services like Prerender.io can serve pre-rendered HTML to search engine crawlers while serving the JavaScript version to users. This works but adds a dependency and can create discrepancies between what Google sees and what users see if not maintained carefully.
What to Check on Your SPA
If you’re running a single-page application and want to verify your on-page SEO is working:
- Test with Google’s URL Inspection tool in Search Console. It shows you what Google sees after rendering. If your content isn’t visible there, it’s not being indexed.
- Disable JavaScript in your browser and load your pages. If you see a blank page or a loading spinner, that’s what Googlebot initially sees too.
- Check your rendered HTML using View Source versus Inspect Element. View Source shows the initial HTML response; Inspect Element shows the DOM after JavaScript execution. If your content only appears in Inspect Element, you’re relying on client-side rendering.
- Monitor Core Web Vitals carefully. SPAs are prone to high Largest Contentful Paint (LCP) and Cumulative Layout Shift (CLS) scores. These directly affect rankings.
- Verify that internal links use proper
<a>tags withhrefattributes. Many SPA frameworks use JavaScript-based navigation that Googlebot may not follow. Standard anchor tags with proper hrefs are crawlable;onClickhandlers are not.
The Honest Assessment
If your site is a single-page application and SEO matters to your business, invest in server-side rendering. The half-measures (pre-rendering, dynamic rendering) work, but they’re workarounds that add complexity and fragility. SSR solves the problem properly.
If you’re choosing a framework for a new project and SEO is a priority, Next.js (for React) or Nuxt (for Vue) with SSR or SSG are the current best options. If your content is mostly static, a traditional CMS or a static site generator will always be simpler and more SEO-friendly than any SPA framework.
On-Page SEO as a Prioritisation Exercise
The biggest mistake I see isn’t doing on-page SEO wrong. It’s doing it without priorities.
When I run a site audit, I regularly find sites with perfectly optimised alt text on every image, meticulous meta descriptions, clean URLs, and comprehensive schema markup, but generic title tags and content that doesn’t match search intent. They’ve done 80% of the checklist but missed the 20% that actually matters.
On-page SEO is a prioritisation exercise. Start with the elements that have the biggest impact on rankings: title tags, content quality and intent matching, heading structure, and internal linking. Once those are solid, move to the supporting factors. And if you’re running a single-page application, sort out your rendering strategy before worrying about anything else, because none of your other optimisations matter if Google can’t see your content.
If your organic performance has plateaued despite doing “all the right things,” it’s worth having someone look at your pages with fresh eyes. Sometimes the problem isn’t what you’ve done; it’s what you’ve prioritised. A technical SEO review can identify whether the bottleneck is on-page, technical, or something else entirely.