Home › Tools › Keyword Density Checker

Keyword Density Checker

Word and phrase frequency with 150+ English stopwords removed, calibrated on 44 real homepages — median top phrase 2.6% — plus why the 1-3% rule means nothing.

Paste your text and get word and phrase frequency with common English stopwords removed, so the top of the list is actually informative instead of being 'the, and, of'. Calibrated on 44 real homepages, so you can tell whether your top phrase is unusually dominant or completely ordinary.

How to use it

  1. Paste the body copy only — not the navigation, footer or a pricing table.
  2. Choose phrase length — two-word phrases are usually the most informative.
  3. Look at the repeated phrases; those are your real topic terms, not the ones you planned.
  4. Compare your top phrase's share against 2.6%, the median across 44 real homepages.

There is no ideal density number

The idea that a page should contain a keyword between 1 and 3 percent of the time has no basis in how ranking systems work. Writing to hit a density target produces worse text, and worse text performs worse.

The useful question this tool answers is different: what is this page actually about, as measured by what it says? If the top phrases are not the topic you intended, the page is off-target and no density tweak will save it.

It is also worth noticing that the 1–3% figure is not even well defined. Percentage of what — of all words, or of all two-word phrases? Those give different answers on the same text, as the measurements below show. A rule that changes its answer depending on a dropdown in the tool was never a rule.

What 44 real homepages actually look like

We ran this exact counting logic over the body copy of 78 well-known homepages on 6 October 2026. Fifteen did not return a 200, eight had under 150 words of server-rendered text, three were bot walls, six came back in Chinese or Japanese because our crawl exits in Asia, and two were unreachable. That left 44 pages, with a median of 782 words of body copy each (the middle range was 255 to 2,251).

Across those 44 pages, the most repeated two-word phrase accounted for a median of 2.6% of all counted phrases. The middle half of the sample sat between 1.1% and 5.8%, and the laziest page in the sample had a top phrase at just 0.5%. Only a handful of pages had a single phrase above 6%.

The top five phrases combined accounted for a median of 8.8%, and the top ten for 13.0%. In other words: on a normal page, nine tenths of everything you said is not in the top ten most repeated phrases at all. A page whose top phrase clears 6% is genuinely unusual, and worth looking at rather than celebrating.

The number changes completely with phrase length

On the same 44 pages we counted single words, two-word phrases and three-word phrases. The median share of the top item was 4.5% for a single word, 2.6% for a two-word phrase and 1.9% for a three-word phrase. Same pages, same text, three different answers.

This is arithmetic, not a finding about the pages. A three-word phrase is a stricter match than a one-word phrase, so it is rarer, so its share is smaller. The consequence is practical: any density target you read is meaningless unless it says which phrase length it was measured on, and essentially none of them do.

Use one setting consistently and compare a page against itself over time, or against the medians above. Comparing a single-word density from one tool against a phrase density from another is comparing two different measurements.

The densest phrase is usually interface text, not a keyword

This was the most consistent thing in the sample. On page after page, the most repeated phrase was something the template emits, not something a writer chose.

forbes.com's top phrase was 'hours ago' (17 occurrences, 7.0%) — every article card carries a timestamp. stanford.edu's was 'min read' (16 occurrences, 5.1%), the reading-time label on each news item. cdc.gov's was 'next slide' (6 occurrences, 5.4%), which is a carousel control. None of those are topics; they are furniture.

The outlier was wise.com, where 'send money' appeared 107 times and made up 24.9% of all counted phrases. That one is real: it is the product, and the page says it constantly, in headings, buttons and navigation. It is also roughly ten times the median, and it is the clearest example in the sample of a page that is genuinely about one thing.

The brand test tells the same story from the other side. The domain's own name appeared among the top five two-word phrases on only 14 of 44 pages (31.8%), but among the top three single words on 27 of 44 (61.4%), and it was the single most common word on 16 of 44 (36.4%). Brands show up as words; they rarely show up as phrases, because a brand name is usually next to a different word each time.

Paste the body, not the page

Navigation menus and footers repeat the same links dozens of times, and they are visible text. We counted each homepage twice: once with the body copy only, and once with everything visible including menus and footers.

The two versions agreed on the top phrase on only 22 of 44 pages — half. On the other 22, including the boilerplate changed which phrase came first, and the winner gained a median of three extra occurrences.

yoast.com is the extreme case: 'yoast seo' appeared 26 times in the body copy, but 19 of those 26 came from the navigation and footer rather than from anything the page says. If you paste a whole rendered page into this tool and act on the result, there is a real chance you are reacting to the menu.

Three ways the top phrase is fake

Repeated cells in a table. cloudflare.com's homepage has a pricing row where the same value appears in a long run of cells. Counting phrases across the whole text produced 'free free' 137 times — 20.8% of every phrase on the page, by far the largest number in the sample. Nothing on that page says 'free free'. A table row is not a sentence, and adjacency is not a phrase.

Punctuation and accents that the tokenizer drops. The tokeniser keeps letters, digits and apostrophes, so '2:02' becomes two tokens and appeared as bloomberg.com's top phrase ('2 02', six times), and 'Flávio' became 'fl vio', which was theguardian.com's top phrase (five times). Both are real content, misread. If your top phrase contains a bare number or a word fragment, that is what happened.

Text that was only adjacent because something was removed. When we stripped the navigation from target.com we left the text on either side touching, which manufactured 'loading loading' 45 times, or 17.0% — the second-largest number in the sample, and entirely our own doing. We fixed it by treating every removed block as a hard boundary.

How to confirm which one you are looking at: take the phrase and search for it in your source. If it does not appear as written, it is an artefact. If it appears only inside a table or a list of labels, it is furniture. Only if it appears in ordinary sentences is it a real topic term.

What to do with the output

If a phrase you want to rank for appears once or twice, the page probably does not cover that topic deeply enough yet. Add a section that genuinely addresses it.

If a phrase appears far more than everything else, the page may be too narrow, or you may be repeating yourself. Check whether those repetitions say something new each time — the wise.com example repeats deliberately; a page that repeats accidentally reads like a loop.

If your top phrase is a timestamp, a label or a carousel control, the measurement is telling you about your template. Delete it from the paste and run it again.

How to read the table without over-correcting

Start with the phrase-length selector set to two words. Single words are dominated by generic topic terms that appear in every article on the subject, so they tell you almost nothing. Two-word phrases are where the actual subject of the page becomes visible.

Look for phrases you expected to see and did not. A page about subtitle timing that never produces the phrase 'subtitle timing' is a page that talks around its subject — usually because the writer assumed the topic was obvious. It is not obvious to a crawler.

Then look at the shape of the distribution. The 44-page sample produced a median of 31.7 distinct two-word phrases per 100 words, with the middle range at 25.7 to 38.9. Far below that and the page is saying the same few things over and over; far above it and the page may be covering too much to be about anything.

What you should not do is edit the text to move numbers. If a term is missing, the fix is a paragraph that genuinely covers it. Adding the phrase without the substance produces a page that reads like it was written for a counter — and no ranking system rewards that.

When not to use a density check at all

Do not use it on short text. trello.com returned 179 words of body copy, and its top phrase was three occurrences of a customer-story label — 5.8%, which looks dominant and means nothing. Below roughly 300 words, two accidental repetitions outrank your actual subject.

Do not use it on text in another language. The stopword list is English, so the filter removes nothing useful and the top of the list fills with whatever function words that language uses most. The numbers will look plausible and will be meaningless.

Do not use it on tables, product grids, navigation or code. Those are structured repetitions, and the most repeated phrase will be whichever value the template emits most often.

And do not use it to decide what to write. Use it to check that what you wrote is about what you think it is about. If the page is thin, the fix is research and substance — the reasons pages fail to get indexed are almost never about word counts, and a density number cannot tell you which one you have.

How we measured the 44-page sample

The domain list is the one behind our heading structure, favicon and readability surveys, so the numbers are comparable across them. For each site we fetched the homepage, stripped script, style, template, noscript, svg and iframe, then removed everything inside nav, header, footer, aside and form using tag-stack matching rather than a text heuristic. Body copy is what was left.

We counted phrases with the same function this page uses, loaded from the same JavaScript file, so the survey and the tool cannot drift apart. One deliberate difference: the survey counts phrases inside each block (paragraph, list item, table cell) and never across a block boundary, while this tool counts across the whole text you paste. That difference is exactly what produced the 'free free' artefact above — which is why you should paste body copy here, not a rendered page with its tables.

Two things this method cannot see: content injected by JavaScript after load, which is why client-rendered homepages came back with almost no text and were excluded rather than counted as empty; and the fact that 78 hand-picked well-known domains are not a random sample of the web. The numbers describe famous homepages, nothing else. The script is scripts/survey-keyword-density.mjs and re-runs offline with --report.

If you want the numbers in context, the same 44 pages are measured for sentence difficulty by the readability checker and for structure by the heading analyzer, and both of those carry their own caveats about what they cannot see.

Questions

What counts as a stopword here?

A built-in list of roughly 150 common English function words — articles, prepositions, pronouns, common verbs. You can switch the filter off to see raw counts.

Why are two-word phrases more useful?

Single words are dominated by topic-generic terms. Phrases reveal what the page is actually about, because 'subtitle timing' says far more than 'subtitle'.

Should I optimise for the top phrase?

Only if it matches your intent. Often the analysis reveals the page drifted off topic, and the right response is to rewrite a section rather than to adjust counts.

What is a normal share for the top phrase?

Across 44 real homepages the median was 2.6% of all counted two-word phrases, with the middle half between 1.1% and 5.8%. Above about 6% is unusual and worth checking — it is often a template label rather than your subject.

Why is my top phrase something like 'min read' or 'hours ago'?

Because you pasted the whole rendered page. Timestamps, reading-time labels and carousel controls repeat on every card and easily outnumber your actual topic. Paste the body copy only and re-run.

Why did I get a phrase made of two identical words, or a number?

Adjacency artefacts. A table row of repeated cells produces 'free free'; a duration like '2:02' becomes '2 02'; an accented name like 'Flávio' becomes 'fl vio'. Search the phrase in your source — if it is not there as written, ignore it.

Does keyword density affect rankings?

No. There is no density threshold in any ranking system. What matters is whether the page covers the topic, which repeated phrases can reveal but never fix on their own.

Is my text uploaded anywhere?

No. Everything runs in your browser — the same client-side model as the rest of the tools on this site.

Related tools