Skip to content

Use this result well

Inputs that matter
Source text up to 500,000 UTF-16 units and a separate optional keyword or phrase up to 2,000 units, with match type, case, overlap and word-language controls.
Output to expect
Occurrences and their denominator, selectable source locations, searchable 1-, 2- and 3-word frequency tables, filtered CSV and a complete frequency-analysis JSON report.
How it works
Whole-word matching follows browser word-like boundaries. NFC and Unicode 17 default full case folding preserve accents and internal punctuation. A phrase cannot cross punctuation between words; text fragments must span complete source graphemes.
  • Whole-word rate = occurrences / all source words × 100. Text-fragment rate uses source grapheme clusters; distinct word coverage is reported separately.
  • Frequency groups always count overlapping windows. Hiding common English words filters rows without changing the source denominator or creating new phrase neighbors.
  • Match locations preview the first 50. Browse every frequency row in pages of 50; JSON retains every row and the exact source. Project summaries retain the first 10 single-word rows.
  • Counts help inspect repetition in context. They do not give an optimal SEO keyword density, semantic importance or ranking prediction.
Was this tool helpful?

Reference & details

How it works

Choose the matching rule

Whole-word mode matches adjacent word-like tokens, allowing different whitespace but stopping at punctuation between tokens. Text-fragment mode retains exact spaces and punctuation and requires complete source grapheme boundaries. Overlapping query matches are optional.

Source: ICU Boundary Analysis

Normalize without losing the source

Case-insensitive matching uses NFC, Unicode 17.0.0 default full case folding, then NFC again. Accents and internal punctuation remain; no stemming or synonyms are applied. Word language selects browser Intl.Segmenter boundaries, which can differ by browser and language dictionary. A Unicode-run fallback is disclosed when word segmentation is unavailable.

Source: Unicode 17.0.0 CaseFolding.txt

Read the denominator

The whole-word rate is occurrences divided by all source word-like tokens, multiplied by 100. Distinct word coverage counts the union of matched tokens. Text-fragment rates use source grapheme clusters and are not word-density percentages. No rate is calculated with a zero denominator.

Keep a useful record

The first 50 matching locations link back to the original text. Frequency tables cover all 1-, 2- and 3-word groups, with 50 rows per page. CSV exports every row matching the selected group and filters; JSON includes the exact source, settings, complete frequency tables and the first 50 match offsets.

Interpret repetition in context

These rates describe the entered text and do not give an optimal keyword density or predict rankings. Google Search guidance describes unnatural keyword repetition as keyword stuffing. Review whether each occurrence helps the reader.

Source: Google Search spam policies: keyword stuffing

Updated: September 2026

Example Scenarios

Search for red blue in red blue red blue: two non-overlapping occurrences across four source words give 50 occurrences per 100 words and 100% word coverage.

Whole-word art does not match cart. Switch to Text fragment when you deliberately need part of a word or punctuation, then inspect its source locations.

Compare Café and CAFÉ, or Straße and STRASSE, with case sensitivity off. Choose the intended word language and inspect boundaries before comparing passages.

FAQ

These counts describe repetition and do not predict rankings. Google Search guidance discusses unnatural keyword repetition; use context, usefulness and clear writing to decide what to change.

Whole-word phrases require adjacent tokens separated only by whitespace or no separator. Red, blue does not match red blue. Choose Text fragment to search for the comma and spacing explicitly.

In red red red, the phrase red red occurs once without overlap and twice with overlap. Frequency tables always count overlapping 1-, 2- and 3-word windows; the query overlap setting affects only query matches.

No. It hides frequency rows containing a listed common word, including phrase rows, and changes the filtered CSV. The source denominator, query matches and complete JSON stay unchanged.

The source limit is 500,000 UTF-16 code units and the query limit is 2,000. Text analysis runs in your browser; larger drafts use a cancellable background task. Copy provides a summary, print uses the current view, and downloads are created when you request them. The source is included in analysis JSON.

About Keyword Density Checker

Enter your source text and a separate keyword or phrase. Choose whole-word or text-fragment matching, inspect the matching locations, and browse repeated words and phrases before deciding what to edit.