Content SEO Checker: Keyphrase and Readability Analysis
Paste your article, set a focus keyphrase, and get the SEO and readability checks the Yoast SEO plugin runs, updating as you type. It runs in your browser, so your draft never leaves your computer.
Pasting from Google Docs or WordPress keeps headings, links, lists and image alt text. Switch to HTML to paste or edit source code.
What this checker runs
Yoast publishes the content analysis behind its WordPress plugin as an open-source JavaScript library called yoastseo, licensed GPL-3.0. This page loads version 3.6.0 of that library into a Web Worker in your browser and feeds it your keyphrase, SEO title, slug, meta description and article. The traffic lights and the feedback text are the library's own output, not my rewrite of it. Yoast describes the idea behind it in its research on real-time content analysis. I am not affiliated with Yoast; I use the plugin on client sites and wanted the same checks for drafts that are not in WordPress yet.
A few things differ from the plugin. "Previously used keyphrase" needs your site's database, so it is not here. Synonyms, related keyphrases and word forms are Premium features, so matching works the way the free plugin does: the words have to appear in the forms you typed (the keyphrase matching notes explain the details). One check is included that the plugin only shows in Premium: keyphrase distribution, because it ships in the open library.
SEO checks and their thresholds
These come from Yoast's SEO scoring criteria for version 3.6.0. "Content words" means the keyphrase without function words like the, to or for.
| Check | Green when |
|---|---|
| Keyphrase in introduction | All content words of the keyphrase are in one sentence of the first paragraph. Orange if they are spread over several sentences. |
| Keyphrase length | 1 to 4 content words. 5 to 8 is orange, more is red. |
| Keyphrase density | Between 0.5% and 3% for texts of 100 words or more. Shorter texts use a count: once or twice. Above 4% is a strong red. |
| Keyphrase in meta description | The keyphrase appears in 1 or 2 sentences of the description. |
| Meta description length | More than 120 and fewer than 157 characters. |
| Keyphrase in subheadings | 30% to 75% of your H2 and H3 headings reflect the keyphrase. Short texts with no subheadings pass. |
| Keyphrase in SEO title | The exact keyphrase opens the title. Elsewhere in the title is orange. |
| SEO title width | Up to 600 pixels, measured in Arial 20 px like the desktop preview above. On a phone the preview switches to the mobile result, where Google wraps the title over about 2 lines instead of cutting it, but Yoast still scores the 600 px desktop width. |
| Keyphrase in slug | All content words for 1 or 2 word keyphrases, more than half for longer ones. |
| Keyphrase in image alt attributes | At least one image alt contains the keyphrase. With 5 or more images, 30% to 75% of them. |
| Competing links | No link in the text uses the keyphrase as its anchor text. |
| Keyphrase distribution | In texts of 15 sentences or more, the keyphrase shows up across the whole text, not only in one part. |
| Text length | 300 words or more. 250 to 299 is orange. |
| Internal and outbound links | At least one followed link to your own site and one to another site. |
| Images and single title | At least one image, and no more than one H1 in the body. |
Readability checks and their thresholds
From Yoast's readability scoring criteria. They look at the article body only.
| Check | Green | Orange | Red |
|---|---|---|---|
| Subheading distribution | No section longer than 300 words | 300 to 350 words | Over 350, or 300+ words with no subheading |
| Paragraph length | 150 words or fewer | 150 to 200 | Over 200 |
| Sentence length | 25% or fewer sentences over 20 words | 25% to 30% | Over 30% |
| Passive voice | 10% of sentences or fewer | 10% to 15% | Over 15% |
| Transition words | 30% of sentences or more | 20% to 30% | Under 20% (texts over 200 words) |
| Consecutive sentences | Fewer than 3 in a row start with the same word | 3 or more |
Flesch reading ease appears under Text stats for English only. It is not one of the scored readability checks in this version of the library, so it is shown as information, not as a traffic light. Higher means easier: 60 to 70 is plain English, below 30 reads like an academic paper.
How the traffic lights and the overall score work
Each check returns a score. 8 or 9 is green, 5 to 7 is orange, 4 or lower is red, and some problems score below zero so they drag the total down harder. The SEO bullet is the average of all SEO scores on a 0 to 100 scale: above 70 is good, 41 to 70 is OK, 40 or below needs work. Readability counts penalty points instead, 3 for every red and 2 for every orange.For English, 4 points or fewer is good, 5 or 6 is OK, and 7 or more needs improvement. Problems are listed first in both panels so you fix the reds before polishing the oranges.
Checking Indonesian articles
Switch the text language to Indonesian and the library uses its Indonesian researcher: Indonesian function words for keyphrase matching, plus Indonesian transition words, passive voice and sentence beginnings. There is no Flesch formula for Indonesian, so that stat stays empty. Because Yoast counts Indonesian as a partly supported language for readability, a red costs 4 penalty points instead of 3, and the bullet turns OK at 3 points and red at 5 (see the supported languages table). Passive voice in Indonesian is detected from words that start with di-, minus an exception list, so the informal spellings dimana and disini count as passive while the standard di mana and di sini do not. On the Indonesian page the feedback text comes from Yoast's own Indonesian translation.
How I use it on client articles
I treat the panels as a checklist, not a grade. The reds that matter most are the ones a reader would notice too: a keyphrase missing from the title and intro, a meta description that gets cut, walls of text with no subheadings. Density and transition words are guides. If a keyphrase reads awkwardly after the fourth use, I leave the orange alone. Once the article reads well, I check the title and description widths again in the SERP preview tool, which can also check the live URL once the post is published.