What keyword density actually measures
Keyword density is one division: how many times a word appears, divided by how many words the text has. Nine mentions in a 318-word page is 2.83%. That is the whole formula, and it is why the number is easy to compute and hard to interpret.
For phrases the division is ambiguous, and tools quietly disagree. If a two-word phrase appears once in nine words, is that 1/8 (one of the eight possible two-word slots, 12.5%) or 2/9 (the two words it occupies, 22.2%)? This tool shows the second figure by default because it matches what people expect from the single-word number, and shows the first in the tooltip. When your figure differs from another tool, this is usually why.
Two more choices change the result: whether stop words stay in the denominator, and whether phrases may cross a sentence boundary. Here stop words always stay in the denominator — hiding them from the table never changes a density — and phrases never cross a full stop, because "copy. SEO" is not a phrase anyone wrote.
Is there an ideal keyword density?
No. Google has never published a target density, and no version of its documentation contains one. The "1–2% is ideal" figure that circulates in SEO advice has no source — it is a rule of thumb copied from tool to tool since the early 2000s, when search engines really did weight raw term frequency.
What Google's spam policies do describe is keyword stuffing: filling a page with repeated words or number lists, blocks of text listing cities a business is not in, or the same phrase repeated so that it reads unnaturally. The test in the policy is readability, not a percentage. A page can be at 6% and read perfectly if the topic genuinely requires the word, and a page can be at 1% and read like spam.
A frequently quoted "KeywordStuffingScore" from the 2024 leak of internal API documentation is an unofficial observation of a field name, not a published threshold. Treating it as a target would be inventing precision that does not exist.
- Use the number the way this page suggests: as a prompt to reread the paragraphs where a word clusters, not as a dial to tune.
What to check instead of density
Placement beats frequency. A keyword mentioned three times — once in the title, once in the H1 and once in the opening paragraph — is a clearer signal than the same keyword mentioned fifteen times in the middle of a page. The target keyword panel above checks the placements that actually matter.
- Title: the strongest single placement, and the line searchers read in the result. Put the keyword in the first half, where truncation cannot reach it.
- H1: should agree with the title. Google often uses the H1 when it decides to rewrite a title link, so a mismatch is a risk in both directions.
- First 100 words: readers decide there, and a snippet is often assembled from the opening when the meta description does not answer the query.
- Subheadings, image alt text and the URL slug: worth one natural mention each. Alt text describes the image first; a keyword that does not describe the image belongs somewhere else.
- Internal link anchors from other pages: the one placement that is not on this page at all, and often the most neglected.
N-grams: why phrases overlap
An n-gram is a window of n consecutive words slid one word at a time. In "new york city", the two-word windows are "new york" and "york city" — both counted once. That overlap is standard and intentional: the tool cannot know which pairing is the meaningful phrase, so it reports both and lets you read.
Two-word and three-word tables are usually more useful than the single-word table, because that is where topics live. A page about "keyword density" will show that phrase in the 2-gram table even if "keyword" and "density" separately look unremarkable, and a competitor's page often reveals its angle in its top 3-grams.
Windows never cross a sentence boundary here, so the last word of one sentence never pairs with the first word of the next. That makes the counts slightly lower than tools that ignore punctuation, and it makes them mean something.
Stop words: when to remove them and when not to
Stop words are the words that carry structure rather than topic: the, and, of, is in English; 이, 그, 것, 수, 있다 in Korean. They dominate any frequency table — "the" is usually the most common word in an English page by a wide margin — so hiding them makes the table readable. That is all the toggle does here: it hides rows. Densities are computed against the full word count either way, so a number never changes when you flip it.
Do not hide them when the stop word is part of what you are measuring. Brand names and titles are the usual case: "The Verge", "It's Nice That", "이것이 코딩테스트다". Add such words to the custom list in reverse — remove them from the stop words — or read the phrase tables, where a phrase is hidden only if every word in it is a stop word.
- Korean stop word lists are shorter and blunter than English ones because Korean carries structure in particles attached to words rather than in separate words. That is what the particle option addresses, and it is a different problem from stop words.
Counting words in Korean, Japanese and Chinese
Splitting on spaces works for English and fails for CJK. Chinese and Japanese have no spaces between words at all, and Korean has spaces but attaches particles to the word: 검색을, 검색이, 검색은 are one concept in three forms. Tools that split on whitespace either report one giant "word" for a Chinese sentence or three separate entries for the same Korean noun.
This tool uses Intl.Segmenter, the word-segmentation API built into browsers, so Chinese and Japanese sentences are split into words with no library and no upload. Korean is segmented too, but the result depends on the browser's ICU version — some builds separate the particle, some do not. Rather than pretend otherwise, the tool counts by eojeol (the space-separated unit) and says so above the table.
The optional particle stripping cuts one trailing particle from each eojeol: the two-character forms 에서, 으로, 에게, 까지, 부터 first, then the one-character forms 은, 는, 이, 가, 을, 를, 의, 에, 와, 과, 도, 만. It refuses to cut when the stem would be a single character, and it runs once. It is a heuristic, not a morphological analyser: 있다 and 보다 end like particles and are left alone. Turn it on to merge 검색을 / 검색이 / 검색은 into 검색; turn it off when you care about the exact surface forms.
- Density percentages mean something different in CJK: one Hangul syllable or one kanji carries more meaning than one Latin letter, so a Korean page of 600 syllables is comparable to an English page of 300 words. The reading-time estimate on this page follows that: characters per minute for CJK, words per minute for Latin.
Getting the body text out of an HTML page
Counting a whole HTML file counts your navigation, your footer, your cookie banner and your script tags. On a typical site that is 200 to 400 words of boilerplate repeated on every page, and it will move every density figure — often enough to make the real topic of the page look diluted.
The HTML tab here removes script, style, noscript, template, svg, iframe and canvas content, then removes nav, header, footer, aside and form. If the page has a <main> element it counts only that, otherwise the first <article>, otherwise the body. The tool tells you which one it used, so you can tell whether the page's markup was helpful or not.
- A page that has no main, no article and a nav-heavy layout will still overcount. Wrapping your content in <main> fixes it for this tool, for screen readers, and for reader modes at the same time.
- If you are comparing your page with a competitor's, extract both the same way. Comparing your clean body text with someone else's full page HTML produces numbers that mean nothing.
Keyword stuffing: what actually gets penalised
Google's spam policies name keyword stuffing directly and give examples: lists of phone numbers with no added value, blocks of text listing cities and regions a page is trying to rank for, and the same words or phrases repeated so often that the text reads unnaturally. The judgement is about the reading experience, and it applies to text hidden from users just as much as to visible text.
Modern search engines do not need repetition to understand a topic; they work with related terms, entities and the structure of the page. Repeating an exact phrase fifteen times mostly signals that the writer was optimising for a 2005 algorithm. Synonyms, related questions and concrete detail do the job that repetition used to attempt.
- Hidden text is a separate and more serious problem: white text on a white background, text behind an image, text moved off-screen with CSS, and font-size: 0. All of it is explicitly listed under spam policies, and none of it is worth the risk.
- The practical check is the one this page ends with: read the paragraphs where a keyword clusters. If a human reader would notice the repetition, so will the ranking systems — and so will the reader, who leaves.