What the checker counts
Paste plain text or HTML. Before counting, the checker removes script and style blocks, HTML comments and tags, and decodes entities: numeric codes such as ’, and named ones such as &, , ’ and –. Then it lowercases the text and splits it into words. Anything that is not a letter or a number ends a word, except an apostrophe or hyphen inside one, so “don’t” and “long-tail” each count as a single word.
The results update as you type, and everything runs in your browser.
What you get back
- Text summary: Words, Unique words, Sentences, Characters, characters with No spaces, and Reading time at 230 words a minute, rounded, with a minimum of 1 minute.
- Single words: the 12 most frequent words, with their count and density.
- Two-word phrases and Three-word phrases: the 12 most frequent phrases that appear more than once.
- Focus keywords: for each term you enter, separated by commas, how often it appears as a whole phrase.
- Notices: short text, a word repeated heavily, or a focus keyword not found.
How each percentage is worked out
Density is a count divided by the total number of words, times 100, rounded to one decimal. The total always includes every word, stop words too, whatever the checkbox says. What differs is the count.
| Figure | Formula | Example on a 59-word paragraph |
|---|---|---|
| Single word | Times the word appears ÷ total words | “madrid” 7 times: 11.9% |
| Two- or three-word phrase | Times the phrase appears ÷ total words | “flights to madrid” 7 times: 11.9% |
| Focus keyword | Times the phrase appears × words in the phrase ÷ total words | “flights to madrid” 7 times × 3 words: 35.6% |
So one phrase can show two percentages. The phrase tables say how often it occurs. The focus figure says how much of the text it fills. Neither is wrong; just compare like with like.
Focus keywords must match whole words: “seo” does not match inside “seoul”. Capitals do not matter. Phrases are counted in overlapping runs of words, and punctuation does not break a run, so the end of one sentence and the start of the next can form a phrase.
Why there is no right density
Google publishes no target or ideal keyword density, as of October 2026. No percentage appears in its documentation for site owners. What it does publish points the other way: its spam policies name keyword stuffing, and one of the examples given is repeating the same words or phrases so often that it sounds unnatural. The policy gives no number for when that starts. It is judged by how the text reads.
Search has also moved past matching strings. Google describes systems that understand synonyms and the meaning of a query, so a page does not need to repeat an exact phrase to be relevant to it. A page that says “water heater” once and then talks plainly about tanks, pilot lights and sediment is about water heaters.
Targets you may have seen come from tools, not from Google. Yoast SEO’s keyphrase density check, for example, turns green between 0.5% and 3%, according to Yoast’s own documentation as of October 2026. That is a rule of thumb that plugin applies, not a threshold Google uses.
This checker has one threshold of its own, and it is about reading, not ranking: a notice when any single word reaches 6% of the text, which is about one word in sixteen. At that rate most readers notice the repetition.
What the checker is still good for
The useful output is not the percentage. It is the list of what you repeat, which is hard to see in your own writing.
- Finding a word or phrase used so often that sentences sound mechanical.
- Catching boilerplate: a call to action, disclaimer or instruction pasted under every section shows up in the three-word table.
- Checking that the term people search for appears at all, through the Not found notice.
- Seeing which wording you settled on, such as “water heater” against “hot water heater”, so you can be consistent.
- Spotting loops in drafted or translated copy, where the same phrase returns every few lines.
- Understanding why an SEO plugin’s content analysis is complaining, before you change good copy to please it.
Reading the notices
Three notices can appear under the text summary. None of them means the page is penalized, and having no notices does not mean the copy is good.
“Only 54 words. Density percentages are unstable on short text — a single extra mention moves them sharply.” This appears under 300 words. On short text the numbers swing: in 54 words, a single mention of a four-word phrase is already 7.4%. Read the tables for repeats and ignore the percentages.
“Repeated heavily: “cheap” at 11.9%…” This appears when any word in the Single words table is at 6% or more, and it asks you to read those sentences aloud. It looks at single words only, so a phrase can repeat often enough to grate while each of its words stays under 6%; check the phrase tables yourself.
“Not found in the text: “best seo plugin”.” This appears for each focus keyword that never occurs as a whole phrase. Before adding it, ask whether the page should target that wording at all.
Stop words and the checkbox
Ignore common stop words is on by default. The list is short on purpose, 47 English words: articles, pronouns, forms of “be” and “have”, and common prepositions and conjunctions such as the, and, of, to, in, with, you and your. A long list would hide the repetition the tool exists to show.
With the box ticked, single stop words drop out of the Single words table, and phrases made only of stop words, such as “of the” or “in the”, drop out of the phrase tables. A phrase with one real word stays: “the plugin” and “flights to madrid” are still counted. Totals and percentages do not change, only which rows appear.
Untick it to check the small words. A sales page that says “you” in every line, or an About page full of “we”, shows up. Expect function words such as “the” to cross 6% in ordinary writing, so a Repeated heavily notice about them means nothing.
The list is English only. In other languages, the small words are counted like any other and fill the top of the tables; read past them.
Worked example: a stuffed paragraph and its rewrite
An illustrative travel page, run through the checker with the focus keyword “cheap flights to madrid”. The figures below are the tool’s real output for these two texts.
Stuffed
Looking for cheap flights to Madrid? Our cheap flights to Madrid page compares cheap flights to Madrid from every major US airport. Book cheap flights to Madrid today and save, because cheap flights to Madrid sell out fast. We list cheap flights to Madrid for every month, so you can find cheap flights to Madrid that fit your dates.
Seven uses of the phrase in four sentences.
Rewritten
Find cheap flights to Madrid from every major US airport on one page. Fares update daily, and the calendar marks the lowest price in each month, so you can see whether moving your trip by a few days saves money. The cheapest seats usually go first, so book once the fare fits your budget.
One use of the phrase, and more information.
| Result | Stuffed | Rewritten |
|---|---|---|
| Words | 59 | 54 |
| Unique words | 33 | 49 |
| Focus keyword | 7 times, 47.5% | Once, 7.4% |
| Top single words | “cheap”, “flights” and “madrid”, 11.9% each | No word other than a stop word appears twice |
| Repeated phrases | Five, each at 11.9%: “cheap flights”, “flights to”, “to madrid”, “cheap flights to”, “flights to madrid” | None |
| Notices | Short text, and Repeated heavily | Short text only |
The unique word count tells the story: 33 different words out of 59 against 49 out of 54. The rewrite says the phrase once and spends the rest on what a visitor wants to know.
Two details are worth noticing. “Cheapest” does not count toward “cheap”, because the checker matches exact words, not word forms. And even the rewrite’s 7.4% looks high, only because the text is short. On a 1,000-word page, the same single mention would be 0.4%.
Reading a full post: an illustrative walkthrough
Say you paste a 1,200-word comparison of WordPress SEO plugins, with the focus keywords “seo plugin, best seo plugin”. The values are illustrative. Reading time shows 5 minutes.
Single words: “plugin” appears 84 times, 7%, and the Repeated heavily notice names it. Search the draft and you find most uses are “the plugin” opening a sentence. Swap some for the product’s name, some for “it”, and cut the ones where the subject is obvious. At 52 uses, 4.3%, the notice is gone, and the sentences are clearer about which plugin you mean.
Two-word phrases: “seo plugin” appears 30 times, shown as 2.5%. In the Focus keywords table the same phrase shows 5%, because each use counts its two words. Nothing is wrong; that is the difference between the two formulas.
Three-word phrases: “click save changes” appears 9 times, only 0.8%. No percentage would flag it, but the table shows that the same instruction closes every section. Say it once in a short setup section and cut the rest.
Focus keywords: “best seo plugin” shows Not found. If people search that wording and the post really makes a recommendation, say so once, in plain words, where you give it. If the post does not pick a winner, leave it out.
Getting clean text out of WordPress
What you paste decides what gets counted. Paste the post body to check the writing. Paste the whole page only when you want to see everything a visitor gets, menus and footer included.
- 1.Block editor: open the Options menu, the three dots at the top right, and choose Copy all blocks. Paste it here. The block comments and tags are stripped, so only the post body is counted.
- 2.Block editor, another way: switch to the Code editor from the same menu, select all and copy.
- 3.Classic editor: open the Text tab, select all and copy.
- 4.Page builders: select the article text on the published page and copy it. Builders store layout as shortcodes or in separate data, which would be counted as words or missed.
- 5.Theme: author boxes, related posts and calls to action come from the theme, not the post. Leave them out unless you are checking the whole page.
Avoid pasting the page source from your browser when you check the writing. It brings the menus, footer and sidebar in with your copy, and those words crowd the top of the tables. WordPress also turns apostrophes and dashes into codes such as ’ and –; the checker decodes those, so “don’t” still counts as one word.
SEO plugins run their own checks inside the editor. Yoast SEO’s SEO analysis has a keyphrase density check, which reports a count rather than a percentage. Rank Math’s content analysis includes a keyword density test. SEOPress’s content analysis checks your target keywords. Each uses its own matching rules and limits, so expect their numbers to differ from this checker’s and from each other. None is a figure from Google. If a plugin light is red and the copy reads well, leave the copy.
Odd results, and what causes them
Most surprising counts come from what was pasted or from how words are split.
| What you see | Why | What to do |
|---|---|---|
| Menu labels, “read more” or footer words near the top | The whole page was pasted. | Paste the article only. |
| “https”, “www” and “com” in the table | Web addresses in the text are split into words at each dot and slash. | Ignore them, or remove the links’ addresses before pasting. |
| More sentences than the text has | Any period ends a sentence, so decimals, version numbers, “e.g.” and domain names add extra ones. | Ignore the Sentences figure for technical text. |
| A focus keyword is not found but the page uses it | The form differs: “flight” does not match “flights”, and “long tail” does not match “long-tail”. | Enter each form you use, separated by commas. |
| A phrase that never appears in one sentence | Phrases run across punctuation, so “madrid book” can come from the end of one sentence and the start of the next. | Skip phrases that span sentences. |
| One giant “word” in Chinese, Japanese or Thai text | Words are split at spaces and punctuation, and these languages do not put spaces between words. | The counts are not meaningful for these languages. |
Rewriting repetition without losing the topic
Start with the sentences the notice names, and read them aloud. Most fixes are small.
Use the specific name instead of the category word. Use “it” where the subject is clear. Merge sentences that restate each other. Cut a repeated call to action down to one, near the end. Keep the exact term where a reader looks for it, in the title, the main heading and the opening lines, and write naturally everywhere else, using the words your visitors use. The queries in Search Console show you those words.
Product page
Before: Our contact form plugin is the best contact form plugin for WordPress, because a contact form plugin should be fast.
After: Our contact form plugin loads only on pages that show a form, so the rest of your site stays fast.
One mention, and a reason to believe the claim.
Local service page
Before: Our Austin roofers are the best roofers in Austin. As Austin roofers, we repair roofs in Austin and every Austin suburb.
After: We repair and replace roofs across Austin, including Round Rock, Pflugerville and Cedar Park.
Named suburbs tell a reader more than a repeated city name.
Run the text through again after editing. The aim is not a lower number but tables with no phrase you would be embarrassed to hear read back.
When the numbers do not matter
Some text repeats words because it has to. A high count in these cases is not a problem to fix.
- Text under 300 words, where one mention moves the percentage by points.
- Product, brand and technical names with no synonym: a page about PHP says PHP.
- Recipes, where ingredients repeat in the list and the method.
- Legal text, specifications and documentation, where the same term must mean the same thing every time.
- The category word in a review of that category, when the sentences read well.
- Quotes and code samples.
And when every table looks calm, that is not a sign the page will rank. Density says nothing about whether the page answers the query better than the other results do.
FAQ about the Keyword Density
What is a good keyword density?
There is no target. Google publishes no ideal percentage, and its spam policies treat repeating words until they sound unnatural as keyword stuffing. Use the checker to find repetition a reader would notice, not to reach a number.
Is keyword density a ranking factor?
Not as a target. Google does not publish a density it rewards, and it understands synonyms and related wording. Heavy repetition can hurt, because it reads badly and can count as keyword stuffing.
How is keyword density calculated here?
For single words and the phrase tables: times it appears ÷ total words × 100. For focus keywords, each match also counts the words in the phrase, so a two-word phrase used 30 times in 1,200 words shows 2.5% in the phrase table and 5% as a focus keyword. Totals always include stop words.
Can I paste HTML?
Yes. Tags, comments, and script and style blocks are removed before counting, and entities such as &, and the numeric codes WordPress uses for apostrophes and dashes (’, –) are decoded. Paste from the editor rather than the page source when you can, so menus and footers don’t count as copy.
Why does Yoast SEO or Rank Math show a different density?
Each plugin matches keywords and calculates density its own way, with its own limits. This checker counts exact whole-word matches across the text you paste. The numbers will differ, and none of them comes from Google.
Does it work in other languages?
It counts words in any alphabet that separates words with spaces. The stop-word list is English only, so small words in other languages are counted and fill the tables. In Chinese, Japanese and Thai, which do not use spaces between words, the counts are not meaningful.
Is my text uploaded?
No. The analysis runs in your browser, and the text you paste is not sent anywhere.