Keyword Density Checker

Paste text to see its most repeated single words, 2-word phrases and 3-word phrases, each with an occurrence count and a density percentage.

🌐 Español

🔒 Private by design: your text is processed locally in your browser and never uploaded to any server.

Keyword density is one of the oldest numbers in search marketing and one of the most misused. It is simply how often a word or phrase appears relative to the length of the text, and knowing that ratio for your own draft is genuinely useful. Chasing a particular value for it is not. This page reports the ratio and leaves the judgement to you.

Three rankings from one pass over your text

The report is split into three labeled sections. The first ranks single words, the second ranks two-word phrases, and the third ranks three-word phrases. Linguists call those unigrams, bigrams and trigrams, and the reason all three are shown together is that the phrase you actually care about is rarely a single word. Nobody optimizes a page for “checker”. They write about a “keyword density checker”, which only shows up as a unit in the three-word list.

Each row carries the raw occurrence count as well as the percentage, and the count is the number worth reading first. A phrase at 3.33% in a thirty-word paragraph appeared once. The same 3.33% in a two-thousand-word article means it appeared sixty-six times, which is a completely different editorial situation.

Every percentage shares one denominator

Density here is always occurrences divided by the total number of word tokens in the whole text, times one hundred. The same total is used for all three sections, and the report prints it at the top as “Total words analyzed” so you can check the arithmetic yourself.

That choice is worth naming because it is not the only convention in circulation. A text with thirty words contains thirty unigram positions but only twenty-nine bigram positions and twenty-eight trigram positions, so a tool that divides each section by its own number of positions will show slightly higher percentages for longer phrases. Neither approach is wrong, but mixing them makes numbers from two different tools incomparable. One shared denominator means a bigram at 13.33% and a unigram at 13.33% on this page really did occur the same number of times.

Stop words are removed from one section only

The single-word ranking filters out a hand-picked list of common English function words: articles, prepositions, pronouns, auxiliaries and similar connective glue. Without that filter the top of every unigram list would be “the”, “of” and “and” on every text ever written, which tells you nothing.

The two-word and three-word rankings deliberately skip that filter, because a real phrase usually needs a function word to exist at all. Strip the connectives first and “terms and conditions” becomes “terms conditions”, a phrase nobody has ever searched for. The same word list, and the same tokenizer, are imported directly by the Word Cloud Generator on this site, which is why its “Remove common words” checkbox produces exactly the same filtering you see here.

A worked example with the real numbers

Paste this paragraph in and set the option to 5:

Our keyword density checker shows the keyword density of any draft. A
keyword density checker is not a ranking tool. Use the keyword density
checker to spot a repeated phrase.

The report opens with “Total words analyzed: 30” and then ranks “density” and “keyword” at 4 occurrences and 13.33% each, “checker” at 3 and 10.00%. The bigram section leads with “keyword density” at 4 occurrences and 13.33%, and the trigram section leads with “keyword density checker” at 3 occurrences and 10.00%. Notice that “density” and “keyword” tie on count and are then ordered alphabetically, and that every percentage divides by the same 30.

Running a draft through the checker

  1. Paste your text into the box. A whole article, a landing page, a product description or a single paragraph all work the same way.
  2. Set Top phrases to show (per length) if ten rows per section is not what you want. The field accepts 5 to 25.
  3. Press Keyword Density Checker. Counting happens immediately and the box is replaced by the finished report.
  4. Read the counts before the percentages, then press Copy to clipboard to take the report somewhere else, or Process another to clear the box and start again.

Hyphens, apostrophes and model numbers

A token here is a run of letters, digits and apostrophes. That has consequences worth knowing before you read a report closely.

Digits count, so “iPhone 15” is tokenized as “iphone” and “15” and the pair shows up as a real bigram. An apostrophe inside a word survives, so “isn’t” stays one token rather than splitting into two, but a quote mark wrapped around a word is trimmed off so a quoted ‘great’ still matches every other “great” in the text. Hyphens are not word characters at all, so “state-of-the-art” arrives as four separate tokens and can appear as part of a longer phrase. Matching is case-insensitive throughout, so a phrase at the start of a sentence and the same phrase mid-sentence are counted together.

Density is a symptom, not a target

Repeating a phrase to hit a number is keyword stuffing, and search engines have been penalizing it for well over a decade. What a frequency report is actually good for is catching the things you did not mean to do: the transition phrase you used eleven times in one article, the product name you wrote out in full in every sentence, the target phrase you were sure you had covered that turns out to appear once.

Run the same draft through the Readability Checker if the repetition turns out to be a symptom of long, samey sentences, and check the title and description separately with the SERP Pixel Width Checker, since those are measured in pixels rather than words. More editing tools for the same pass are collected on the text tools hub and in the text tools guide.

See it in action

Screenshot of the Keyword Density Checker tool with the sample input “Compress a PDF in your browser. This PDF compres…”, Top phrases to show (per length) set to 10
Keyword Density Checker mid-process: the sample input “Compress a PDF in your browser. This PDF compres…”, Top phrases to show (per length) set to 10.
Screenshot of the Keyword Density Checker result screen showing the generated output “=== KEYWORD DENSITY REPORT === Total words analy…”
The finished result: the generated output “=== KEYWORD DENSITY REPORT === Total words analy…”. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Does a density of three percent mean anything on its own?

Not really. There is no published threshold that separates a healthy page from a stuffed one, and no search engine documents one. A percentage here is only useful next to the other percentages in the same report, or next to the same page rewritten. Treat it as a way of noticing that one phrase is running far ahead of everything else, then read that phrase in context and decide for yourself.

How does the ranking break a tie between two phrases with the same count?

Count descending first, then the phrase text itself in ascending alphabetical order. That second rule exists so the report is reproducible, since a long tail of words that each appear exactly once would otherwise come back in whatever order the counting map happened to iterate. If you run the same text twice you get the same list in the same order.

My word total here is different from the Word Counter total for the same text. Which is right?

Both, because they count different things. Word Counter splits on runs of whitespace, so a hyphenated compound like state-of-the-art is one word. This tool builds tokens out of letters, digits and an apostrophe inside a contraction, so the same compound becomes four tokens and a standalone dash becomes nothing at all. The phrase counter needs the finer split so a hyphenated term can still take part in a two or three word phrase.

What happens if I clear the top phrases box before running the report?

An empty number box reads as zero, and zero is clamped up to the minimum of five, so you get five rows per section rather than the usual ten. Typing something above the maximum clamps down to twenty five instead. Only a genuinely missing or non-numeric value falls back to the default of ten, which is not something the number input can produce.

What does the report look like if my text is nothing but common words?

You still get a report rather than an error. The single word section prints a line saying no significant unigrams were found because every word was a common stop word or the text was too short, while the two and three word sections still rank normally, since they never had the stop-word filter applied. Pasting the word the three times in a row genuinely produces a bigram row for that repeated pair.

Where does the report itself end up?

It is assembled as a block of plain text in the page memory and shown in a read-only box, with a copy button underneath it. Nothing is written to your disk and no file is downloaded, so if you want to keep the report you have to copy it out or paste your text again later. Starting a new run replaces the previous report entirely.

Related tools