On-page SEO checklist: the twelve things on the page
You have a page and a target query. This checklist shows what to fix on that page, in the order that usually moves the needle. Each item includes a worked example on a fictional product page.
By Théophile Louvart, founder of Porteur · Updated 13 September 2026 · Markdown
The twelve things on the page
Work through these on one URL at a time. Measure in Search Console after 28 days.
- Title tag that fits the query
- Meta description that earns the click
- H1 that matches the search
- First paragraph that answers the question
- Headings that map the subtopics
- The query in plain words on the page
- Internal links into the page
- Internal links out to key pages
- Images with helpful alt text and lean bytes
- Structured data that matches the content
- A visible freshness date where intent needs it
- One intent per page, no cannibalisation
Titles and descriptions that earn the click
Your title is the ad for the page. Match the intent in about 60 characters. Put the main query close to the start. Add a reason to click.
Fictional example on yourproduct.com/pricing targeting “pricing for time tracking software”.
| Element | Before | After |
|---|---|---|
| Title | Pricing | YourProduct | Time tracking software pricing, simple plans |
| Meta description | See our plans and features. | Compare monthly and annual plans. Transparent time tracking pricing. Start free, switch plan any time. |
Why it matters: higher click through rate without more impressions. That can lift average position over time if your page satisfies searchers after the click.
Pick the primary query
Use the exact wording you want to rank for, if it is natural. Example: “time tracking software pricing” not “what are your prices?”
Write the title
Put the query near the start. Add one differentiator. Keep brand out unless it is your home page or branded intent.
Write the meta description
Add two benefits or features and a next step. Do not repeat the title. Make it factual, not hype.
Check truncation risk
Paste into a preview tool or check in your CMS. Edit to avoid cut words.
H1 and first paragraph: answer above the fold
Your H1 should repeat the topic in human words. The first paragraph should answer the search in one to three sentences. Put this before images and banners if you can.
| Element | Before | After |
|---|---|---|
| H1 on /guides/getting-started | Welcome to YourProduct | Getting started with YourProduct time tracking |
| First paragraph | We are excited to have you here. Let’s explore features. | This guide shows you how to set up projects, invite your team, and start tracking time in five minutes. |
Why it matters: users and crawlers see it first. It reduces pogo sticking. It helps Google pick the title link and snippet text if it rewrites them.
Headings and the query in plain words
Plan your H2 to H3 to match subtopics. Use the query and close variants in plain words. Avoid stuffing synonyms. Write for a scan, not for a density target.
Fictional example on /pricing, targeting “time tracking software pricing”. Include sections like “Plan features”, “Annual discounts”, “Compare to manual timesheets”. These match what a buyer wants to know.
| Bad | Better |
|---|---|
| H2: Why choose us | H2: Time tracking pricing plans and features |
| H3: Stuff you need | H3: What is included in Basic, Pro, Team |
| Paragraph: Our solution is scalable | Paragraph: Basic includes unlimited projects, exports, and mobile apps |
Add the exact query once in the H1 or a high H2 if it reads well. Add it once in the first paragraph. Use close variants where natural elsewhere. That is enough for most pages.
Internal links in and out
Links tell Google which page is the hub for a topic. They also move users to the next step. You control both from inside your site.
Add at least three internal links into the target page
From related guides, category pages, and your home page if it fits. Use descriptive anchor text like “time tracking pricing” not “click here”.
Link out from the page to key pages
From the pricing page, link to /signup and /guides/getting-started. From a guide, link to the main feature page and to support docs.
Fix orphan pages
If a page has no internal links, add some. Use your sitemap and a crawl to find them.
Avoid intent conflicts
Do not point many links with the same anchor to two different pages. Pick one canonical page for each topic.
| Page | Before | After |
|---|---|---|
| /blog/time-tracking-in-agencies | Text link: Read more | Text link: Time tracking software pricing |
| /features/time-reports | No link to pricing | Add link: See pricing plans |
| /guides/getting-started | Link: Click here | Link: Compare plans on the pricing page |
Images, alt text, and a fast fold
Use images that help the task. Add alt text that says what is in the image and why it is there. Keep bytes low so the page loads fast.
| Item | Before | After |
|---|---|---|
| Hero image | 3 MB PNG, text in image | Compressed WebP, real product screenshot, text as HTML |
| Alt text | Alt: image1 | Alt: Pricing table for Basic, Pro, Team |
| Below fold | Feature collage | Step by step setup with captions |
Why it matters: images can be the LCP element. Big files slow LCP and hurt conversions. Clear alt text helps accessibility and can appear in image search.
Structured data and a visible date
Add structured data that matches what is on the page. Do not add types that are not visible. Mark up prices on pricing pages, articles on guides, FAQs on real FAQs.
Pick the type that fits the page
/pricing can use Product or Offer markup if you show prices. A guide can use Article. A real Q and A section can use FAQPage.
Mark up what users can see
Keep names, prices, dates, and questions the same in the HTML and the structured data.
Validate
Use a structured data checker. Fix warnings that point to missing required fields.
Add a visible date on pages where recency matters. Examples: a comparison, a pricing guide, a regulation update. Put it near the H1. Update the date when you materially update the content, not for minor edits.
| Page | Before | After |
|---|---|---|
| /pricing | No structured data, no date | Offer markup for each plan. Small line: Updated 5 September 2026 |
| /guides/getting-started | Article markup, date at footer | Article markup, Updated date under H1 |
One intent per page
Each page should answer one intent well. Do not mix high level navigation intent with long form research on the same URL. Split them. Link between them.
| Mixed page | Split into two |
|---|---|
| /features-and-pricing with a long feature list and a plan table | /features for product features. /pricing for plans and prices |
| /blog/employee-time-tracking-guide with a signup pitch at the top | /blog/employee-time-tracking-guide for the guide. /signup for the pitch |
Why it matters: Google ranks by intent. If two of your URLs both try to rank for the same query, they hold each other back. If one URL tries to rank for two different intents, it ranks for neither well.
How to run this checklist on a live page
Choose the URL and the primary query
Use the query with the most relevant intent, not always the highest volume.
Draft the title, meta, H1, and first paragraph
Write them in one go so they align. Keep the same wording of the topic across all four.
Map headings and subtopics
List H2 to H3 that cover what a searcher expects. Trim any section that users do not need to decide.
Place internal links
Add three to five links in from related pages and nav. Add links out to next steps.
Fix images and alt
Compress, convert to WebP or AVIF if available, reserve sizes, and write helpful alt text.
Add structured data and the date
Mark up only what is visible. Put the updated date near the H1 when relevance depends on freshness.
Publish and request indexing
Ship it. Submit the URL for indexing in Search Console.
Measure and iterate
After 28 days, check impressions, clicks, and queries. Improve what searchers see first if clicks lag. Expand subtopics if dwell time is low.
Questions
It covers the elements you control on a single URL. Title, meta description, H1, first paragraph, headings, copy, internal links, images and alt, structured data, dates, and the page’s intent. Technical delivery like speed also affects the page but you handle that at build time.
Match one intent per page. Put the answer above the fold. Use the query in plain words in the title, H1, and near the start of the copy. Add clear internal links in and out. Keep images lean. Mark up what is on the page. Add a visible updated date where recency matters.
Spend most of your on-page time on the elements that change clicks and quick satisfaction: title, meta, H1, first paragraph, and internal links. Only expand sections if users need them to decide. Do not write long content to hit a word count.
Keep the title near 60 characters and the meta description between 120 and 155 characters. That reduces truncation. As of 2026, Google may still rewrite titles and snippets. Write them well anyway, because users also see them on social and in the browser.
Map one primary query to one URL. If two pages both get impressions for the same query, pick the stronger to keep and redirect or retarget the other. Unify internal links so most point to the chosen URL with clear, varied anchors.
Only if a relevant type exists and the page shows that content. Mark up Products or Offers on real pricing, Article on guides, FAQPage on real question and answer blocks. Do not add markup that users cannot see.
Sources
Check my site, free
Paste your URL to get a free on-page check that reads your page and its rivals on your query, and shows three specific fixes in about thirty seconds.
- Free check, no card
- Read-only, your own accounts
- Readable by your agent
Read next
- GuideTitle tag length: what fits, what Google rewrites, and how to write one
- GuideMeta description length, with examples that earn the click
- GuideInternal linking for a small site: which pages link to which
- GuideSearch intent: what the results page tells you to build
- GuideKeyword cannibalization: two pages, one search, and how to fix it
- GuideCore Web Vitals for a product site: the three numbers
- GlossaryOn-page SEO
- Free toolSchema markup generator