A few people asked me to look at their websites this month. I expected to find something clever wrong. I found the basics missing.
So I looked wider. 101 small sites, all under 1,000 visits a month, went through our free site check between September 14 and October 8. 99 of them scored 90 or more out of 100 on an automated on-page SEO score. Of those 99, 82 didn't have a single keyword on page one of Google.
Passing a list of tags isn't the same as being built to rank. This is the checklist we run on every page of our own site instead. In the last 90 days that site earned 1,209,883 Google impressions and 7,963 clicks, on a domain that's six months old.
- Set the site up once: unique titles under 60 characters, meta descriptions of 120 to 155, one H1, canonical tags, share cards, structured data and a sitemap with real dates.
- Build every page the same way: a short intro, a Quick Answer, 5 or more H2s, an FAQ and links in both directions.
- Choose topics on real numbers: search volume, the referring domains of the top 10, a soft page one and no page of your own already chasing it.
- Never trust a guessed search volume: not from a person, and not from an AI.
Set the site up once
Site-wide settings. You do them once, and every new page inherits them.
-
Under 60 characters. The words people search go first, your brand goes last.
Why it matters, and how to check
- Why it matters
- The title is the blue link in Google. It decides more clicks than anything else on the results page, and it tells Google what the page is about.
- How to check
- Search
site:yourdomain.comin Google and read down the titles. Look for "Home", repeats, and anything cut off with an ellipsis. - How to fix
- Write each one as an ad for that page. "Home | Acme" says nothing. "Payroll Software for Small Restaurants | Acme" says everything.
- What we do
- A script checks every title's length before a post ships.
-
120 to 155 characters, with the main keyword in the first clause and one reason to click.
Why it matters, and how to check
- Why it matters
- It's the gray text under the link. Google often rewrites it, but it uses yours when yours matches the search, and a good one wins clicks at the same ranking.
- How to check
- View the source of each key page and search for
name="description". Missing, under 120, over 155 or copied across pages all need fixing. - How to fix
- Lead with the keyword, then a number, a result or a promise. For example, "Run payroll for a 12-person restaurant in 10 minutes a week. Tips, overtime and tax filings handled for you. Free for 30 days."
- What we do
- The same script checks every description.
-
One H1 per page. On the homepage it says what you offer, in words a customer would search.
Why it matters, and how to check
- Why it matters
- The H1 is the page's headline for readers and for Google. A slogan tells neither of them what you sell.
- How to check
- View the source and count the
<h1tags. Then read your homepage H1 out loud. Would a stranger know what you sell? - How to fix
- "Build the future of work" tells Google nothing. "Payroll software for small restaurants" tells it everything. Keep the slogan for the line underneath.
- What we do
- Every post's H1 comes from its title, so there's always exactly one.
-
Lowercase, hyphens, the keyword, and nothing else.
Why it matters, and how to check
- Why it matters
- Short URLs are easier to read, share and link to, and the words in them tell people what to expect before they click.
- How to check
- Look for dates, ID numbers,
?p=123and long strings of filler words in your URLs. - How to fix
/blog/meta-description-length/beats/blog/2026/10/08/post-1234/. Only change a live URL if you redirect the old one.- What we do
- Slugs stay keyword-clean. A numbered variant like
/blog/7-best-x/redirects to/blog/best-x/.
-
Each page points at its own clean URL.
Why it matters, and how to check
- Why it matters
- One page can load at several addresses, such as with and without
www, or with tracking codes on the end. The canonical tells Google which one counts, so your signals aren't split. - How to check
- View the source and search for
rel="canonical". It should match the address you want ranked, exactly. - How to fix
- Most site builders have a setting for it. On a coded site, set it once in the shared layout.
- What we do
- Every post sets its canonical from its slug automatically.
-
A 301 to the new home, in one hop.
Why it matters, and how to check
- Why it matters
- Old URLs keep their links and their traffic for months. A 404 throws both away.
- How to check
- In Search Console, open Pages and look at "Not found (404)". Then try a few old URLs yourself.
- How to fix
- Add a 301 from each old URL straight to the final one. If A goes to B and B goes to C, point A at C.
- What we do
- Our redirects file holds about 120 rules.
-
og:title,og:descriptionand a 1200x630og:image.Why it matters, and how to check
- Why it matters
- When someone pastes your link into X, Slack or iMessage, this is the preview. No card means a bare link people scroll past.
- How to check
- Paste a few of your URLs into a message to yourself and see what shows.
- How to fix
- Set a default image for the whole site, then give your most-shared pages their own.
- What we do
- A script draws a card for every post when the site builds. Nobody makes them by hand.
-
Organization and Person structured data on every page, each with an
@id.Why it matters, and how to check
- Why it matters
- It tells Google and AI tools who runs the site and who wrote each page, so your brand and your author are recognized as the same thing everywhere.
- How to check
- Run your homepage through Google's Rich Results Test or the Schema Markup Validator and look for Organization.
- How to fix
- Add one JSON-LD block to your shared layout with your name, logo, URL and social profiles. Point every article's author and publisher at it.
- What we do
- Every page carries both, and each post's author and publisher point at them by
@id.
-
BlogPosting and BreadcrumbList on posts. FAQPage, HowTo or ItemList where they fit. Product, SoftwareApplication or LocalBusiness on what you sell.
Why it matters, and how to check
- Why it matters
- It spells out what the page is, so search engines and AI tools don't have to guess.
- How to check
- Run one page from each template through the Rich Results Test. Fix errors before warnings.
- How to fix
- Add the markup to the template, not page by page, so every new page gets it.
- What we do
- Every post gets BlogPosting, breadcrumbs and FAQPage. Step-by-step posts add HowTo, and ranked lists add ItemList.
-
Every page you want indexed, nothing you don't, each with its real last-modified date.
Why it matters, and how to check
- Why it matters
- It's how Google finds new pages and notices changed ones. When every date is the same, it stops trusting them.
- How to check
- Open
/sitemap.xml, or whichever file robots.txt names. Look for redirects, 404s, noindexed pages and identical dates. - How to fix
- Generate it from your content, using each page's real updated date.
- What we do
- Our sitemap takes each post's "updated" date, so editing a post moves it.
-
It names your sitemap and blocks nothing you want ranked.
Why it matters, and how to check
- Why it matters
- One stray
Disallowline can hide a whole site from Google. - How to check
- Open
/robots.txt. Read every Disallow line and ask whether you meant it. - How to fix
- Add a
Sitemap:line with the full URL. Remove blocks left over from a staging site. - What we do
- Ours is three lines. Allow everything, and here's the sitemap.
-
Your domain verified and your sitemap submitted.
Why it matters, and how to check
- Why it matters
- It's the only place Google tells you what you rank for, what it couldn't index, and why.
- How to check
- Log in. If your site isn't there, nothing on this list is being measured.
- How to fix
- Add a Domain property, verify it with a DNS record, then submit your sitemap under Sitemaps.
- What we do
- Our daily SEO work starts from Search Console.
-
Your text is in the HTML the server sends, not added after the page loads.
Why it matters, and how to check
- Why it matters
- Many AI crawlers don't run JavaScript. If your text only appears after it runs, those crawlers see a blank page. In our free site check, 5 homepages came back with zero words.
- How to check
- View the page source (not Inspect) and look for your headline and body text. Or run
curl -s yourdomain.comin a terminal. - How to fix
- Turn on server rendering or static generation. Most frameworks have it as a setting.
- What we do
- Our site is built as static HTML, so every word is there before any script runs.
-
A plain-text map of your site at
/llms.txt.Why it matters, and how to check
- Why it matters
- It tells AI tools what you do and where your key pages are. Nobody has shown it moves rankings, so it's a 10-minute job, not a priority.
- How to check
- Open
/llms.txton your domain. - How to fix
- Write a few lines on what you do, then list your key pages with one sentence each.
- What we do
- Ours is written by hand.
Build every page the same way
Part 1 is the frame. This is what goes inside it. Every post on our site has the same parts in the same order, so nothing gets forgotten on a busy day.
-
An author, a published date, and an updated date that moves when the page really changes.
Why it matters, and how to check
- Why it matters
- Readers trust a page more when they can see who wrote it and when it was last checked.
- How to check
- Is a date visible near the top? Does
dateModifiedin the structured data match it? - How to fix
- Bump the updated date on every real edit, not on a typo fix. Never fake freshness.
- What we do
- Every edit to a post bumps its updated date, which feeds the sitemap and the structured data.
-
2 to 4 short paragraphs. The problem, who it's for and what they'll get.
Why it matters, and how to check
- Why it matters
- Readers decide in seconds whether they're in the right place.
- How to check
- Read only the intro. Do you know what the page will give you?
- How to fix
- Cut the history lesson and the "in today's fast-moving world". Start with the problem.
- What we do
- Our build fails if a setup or migration notice sits above a post's opening.
-
4 to 5 bullets straight after the intro, before the first H2.
Why it matters, and how to check
- Why it matters
- Skimmers get the answer fast and trust the rest of the page. AI Overviews and assistants lift short, self-contained chunks, and a tight list is the easiest thing on a page to quote.
- How to check
- Could someone who reads only the box leave with the answer?
- How to fix
- Watch out for one-line answers. In our July data, pages answering a one-line question got 0.38% click-through at position 6.6, while pages answering a how-to or shortlist question got 1.79% at 9.2. Give the answer in the box, and keep the how, the examples and the detail in the body.
- What we do
- Every post on our site has one.
-
Short headings, each a section someone might look for, some phrased as questions.
Why it matters, and how to check
- Why it matters
- Headings are how skimmers, Google and AI tools find the part they need. They double as your table of contents.
- How to check
- Read only the H2s. Do they outline the page? Would anyone search for any of them?
- How to fix
- "How long should a meta description be?" beats "Length considerations".
- What we do
- Our table of contents is built from the H2s, so a vague heading stands out straight away.
-
Each section answers one thing, completely.
Why it matters, and how to check
- Why it matters
- An AI tool that quotes one section should get a full answer from it, without the paragraphs around it.
- How to check
- Read a section on its own. Does it still make sense?
- How to fix
- Split any section that answers two questions. Open with the subject by name, not "this" or "it".
-
In the first fifth of the page, as the answer to the reader's problem.
Why it matters, and how to check
- Why it matters
- Readers who get their answer and leave never find out you sell the fix.
- How to check
- Scroll a fifth of the way down. Has your product or service been named yet?
- How to fix
- Put it where the problem is described, not in a banner.
- What we do
- We audited 195 of our own posts in August. 110 didn't name our product until past halfway, and 6 never did. Now it's a rule.
-
3 or more links out, to docs, studies and official pages.
Why it matters, and how to check
- Why it matters
- It shows where your claims come from and lets readers check them.
- How to check
- Count your outbound links. Do they go to the original source, or to someone else's summary of it?
- How to fix
- Link the source itself. Skip Wikipedia.
-
2 or more links to your own pages in the body, 3 related posts at the end, and a link back from an older post.
Why it matters, and how to check
- Why it matters
- Links are how Google finds new pages and works out which ones belong together. A page nothing links to is hard to find.
- How to check
- Take your newest page. How many of your other pages link to it?
- How to fix
- Every time you publish, add a link to the new page from at least one older page on the same topic.
- What we do
- Our build refuses to publish if a related-post link points at a page that doesn't exist.
-
3 to 5 questions people actually ask, 40 to 60 words each, marked up as FAQPage.
Why it matters, and how to check
- Why it matters
- Google stopped showing FAQ rich results for most sites in 2023. We still write them. They catch long-tail questions, they match how people phrase questions to AI assistants, and each answer is easy to quote.
- How to check
- Are they real questions? Look in Search Console queries, "People also ask" and your inbox.
- How to fix
- Answer the question in the first sentence, then add one useful detail.
- What we do
- Every post has one.
-
1,500 words for a post, 2,000 for a guide.
Why it matters, and how to check
- Why it matters
- The floor makes sure the topic is covered. It's not there to pad. In our free site check, 36 of 101 small homepages had fewer than 500 words, which gives Google very little to rank.
- How to check
- Count the words rather than guessing. Then look for any section that adds nothing.
- How to fix
- If you're short, the page is usually missing a section someone would search for. Find that before adding words.
-
Lengths, structured data, links and one cold read.
Why it matters, and how to check
- Why it matters
- Most SEO mistakes are small. They're cheaper to catch before Google indexes them.
- How to check
- Check the title and description lengths, test the structured data, click every link, and read it once as a stranger would.
- How to fix
- Write the checks down and run the same list every time, or script them. The check you skip is the one that ships broken.
- What we do
- A script checks lengths and structured data before every post ships.
Choose what to write
Parts 1 and 2 make a page able to rank. They don't decide whether anyone is searching for it. This is where most sites go wrong, and it needs real numbers. Ask an AI for a keyword's search volume and it'll give you a confident guess.
-
The job your product does, in their words, before they've heard of you.
Why it matters, and how to check
- Why it matters
- People rarely search for a product. They search for the problem it solves.
- How to check
- Ask five customers what they would have typed into Google before they found you.
- How to fix
- Write down 20 phrases. They're your starting points for keyword research.
-
Monthly volume from a live keyword tool.
Why it matters, and how to check
- Why it matters
- A topic nobody searches for can't send you traffic, however well it's written.
- How to check
- Look each phrase up. Impressions in your own Search Console are a hint, not proof.
- How to fix
- If an AI gave you the number, check it. They guess, and they guess confidently.
- What we do
- We use ContextBolt SEO, the tool we build, for volume, difficulty and intent.
-
How many sites link to each page in the top 10. Not just the difficulty score.
Why it matters, and how to check
- Why it matters
- A difficulty score squashes page one into one number, and it says nothing about your site. The average referring domains per page tells you what it takes to get onto that page, and you can compare it with what you already rank for.
- How to check
- Calibrate against yourself. Find the hardest keyword you already rank in the top 10 for, and note its page-one average. Topics under that line are in reach.
- How to fix
- If the average is far above your line, park the topic. Look for a longer, more specific version of it with a weaker page one.
- A real example
- "jira mcp" had 3,600 searches a month and a difficulty of 51, and its top 10 averaged 77 referring domains per page. We killed it. "recover deleted bookmarks" had 140 searches and a difficulty of 0, and its top 10 averaged 3. We wrote it.
- What we do
- ContextBolt SEO's difficulty lookup returns the top 10's referring domains alongside the score.
-
Forum threads, Reddit and old articles in the top 10 mean you can get in.
Why it matters, and how to check
- Why it matters
- A page of big publishers is close to impossible for a small site. A page of stale posts is an open door.
- How to check
- Search the keyword in a private window. Note who's there and how old their pages are.
- How to fix
- Ten big brands means walk away, however good the volume looks.
- What we do
- We read the results page with ContextBolt SEO's search results lookup.
-
Search your own site and Search Console before you write.
Why it matters, and how to check
- Why it matters
- Two of your pages chasing one keyword split the result.
- How to check
- Search
site:yourdomain.complus the keyword, then filter Search Console by the query. - How to fix
- If the old page earns clicks, improve it instead. If it earns nothing, write the new one and retarget the old page in the same change.
-
The page should lead to something your product really does.
Why it matters, and how to check
- Why it matters
- Traffic that can't become a customer is a vanity number.
- How to check
- Could you write the page's last section as "here's how we do this"?
- How to fix
- If you can't, drop the topic, or pick the version of it your product does solve.
-
The topic, the date and the number that killed it.
Why it matters, and how to check
- Why it matters
- Otherwise the same topic gets proposed again next month, and you pay to research it twice.
- How to check
- Is there one place where rejected topics live?
- How to fix
- Keep one list, a doc or a spreadsheet, and check it before you research anything new.
- What we do
- Since August we've killed more topics than we've written.
-
Pages in positions 5 to 15 with plenty of impressions and few clicks.
Why it matters, and how to check
- Why it matters
- They're the cheapest wins you have. Google already thinks they're relevant.
- How to check
- In Search Console, open Performance, show average position, and sort pages by impressions.
- How to fix
- A better title, a sharper description or the missing section usually moves them.
- What we do
- Our daily optimize run fixes one of these every morning. With Search Console connected, ContextBolt SEO lists them for you.
-
Ask ChatGPT, Gemini and Claude what your customer would ask.
Why it matters, and how to check
- Why it matters
- More buying questions start there now. In our free site check, 79 of 86 small sites weren't named in ChatGPT's answer to a customer-style question.
- How to check
- Note who gets named and which pages get cited.
- How to fix
- The cited pages show you what the AI trusts. Answer the same question better, and get mentioned where they're mentioned.
- What we do
- ContextBolt SEO checks which brands ChatGPT, Gemini, Claude and Perplexity name for your questions.