Count Stop Words in Text for SEO Analysis
Stop words are the short, common terms that hold sentences together, including “the,” “and,” “of,” and “to.” This tool counts every occurrence of those terms in English text and shows how much of the complete word count they represent.
Run — free
It also provides an alphabetical frequency breakdown, making repeated function words easy to inspect. Writers, editors, and SEO specialists can use the result as a quick diagnostic when reviewing keyword density, page copy, headings, snippets, or machine-generated drafts without changing the original text.
Read the count in context
Paste the English text you want to inspect and the tool separates it into words, compares each word with a fixed list of common English stop words, and reports the result. The stopword_count value is the number of matching occurrences, not merely the number of different terms. If “the” appears five times, all five appearances contribute to that count. The total_words field includes every recognized word, while percentage expresses stop-word occurrences as a share of that total and rounds the result to two decimal places. The unique_stopwords field answers a different question: how many distinct listed stop words appeared at least once. Finally, the stopwords array presents each matching term with its frequency in alphabetical order. Read these measures together. A high occurrence count can be expected in a long article, whereas the percentage makes texts of different lengths easier to compare. The frequency list then reveals whether the result comes from varied natural language or unusually heavy repetition of one small term. The tool reports evidence rather than assigning a quality score, because appropriate usage depends on the sentence, audience, and purpose.
Understand tokenization and matching
Matching is case-insensitive, so “The,” “THE,” and “the” are counted as the same term. Punctuation around a word does not prevent a match. Words containing a straight or curly apostrophe remain one token, and curly apostrophes are normalized before comparison; this means common contractions such as “don’t” can match the same list entry as “don't.” The tokenizer recognizes Unicode letters and numbers, which keeps ordinary words intact beyond basic ASCII punctuation, but the stop-word dictionary itself is intentionally English. Hyphenated expressions are treated as separate word tokens on either side of the hyphen. The dictionary is fixed so that identical input always produces identical output, with no remote lookup, changing language model, randomness, or date-sensitive behavior. Stop-word lists are conventions rather than universal linguistic laws, and different SEO products may include or exclude a few terms. Use this count consistently for comparisons made with this tool instead of expecting exact parity with every plugin or search platform. An empty or non-string text value is rejected because it cannot provide a meaningful analysis. Text containing punctuation but no recognized words is valid and returns a zero word count and zero percentage.
Apply the result to SEO and editing
For SEO work, treat stop-word frequency as a diagnostic signal, not an instruction to strip connective language from every sentence. Search engines and readers both benefit from copy that sounds natural and communicates the topic clearly. Compare related pages, title alternatives, or successive drafts using the percentage and frequency breakdown, then investigate obvious outliers. A heading packed with filler may become clearer when shortened, while a detailed article can naturally contain many articles, pronouns, and prepositions. The tool is also helpful during keyword-density reviews because it separates common structural vocabulary from content-bearing terms; you can see why a raw word total differs from a filtered keyword calculation. Editors can use the alphabetical breakdown to notice habitual repetition, and teams can record the metrics in a content audit without modifying source material. Run the same final text that will be published, including headings if they belong in the analysis, and keep the scope consistent across comparisons. API automation costs $0.002 per request, which suits repeatable checks in content pipelines. The response does not claim that a particular percentage will improve rankings, and it should not replace readability review, search-intent research, or editorial judgment.
What you can do with it
Compare landing-page drafts
Measure the stop-word share in competing versions while keeping the analyzed sections and overall purpose consistent.
Support keyword-density analysis
Separate common structural vocabulary from topic terms when explaining filtered and unfiltered word counts.
Audit repeated filler words
Use the per-word frequency breakdown to identify unusually repeated articles, pronouns, conjunctions, or prepositions.
FAQ
What is counted as a stop word?
Each occurrence of a term in the tool's fixed common-English list is counted, including articles, conjunctions, pronouns, and prepositions.
Are repeated stop words counted more than once?
Yes. The total counts occurrences, while unique_stopwords separately reports how many different listed terms appeared.
Is matching case-sensitive?
No. Uppercase and lowercase forms match the same dictionary entry, and surrounding punctuation is ignored during tokenization.
Does a high percentage hurt SEO?
Not by itself. The percentage is a comparison and editing aid, not a ranking verdict; natural language and search intent remain more important.
How much does the API request cost?
Each API request costs $0.002. The calculation is deterministic and does not call an external model or service.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/str/stopword-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"The quick brown fox jumps over the lazy dog and into the garden."}'const res = await fetch("https://api.kit.forhosting.com/str/stopword-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "The quick brown fox jumps over the lazy dog and into the garden."
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/stopword-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "The quick brown fox jumps over the lazy dog and into the garden."
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/stopword-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"The quick brown fox jumps over the lazy dog and into the garden."}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"The quick brown fox jumps over the lazy dog and into the garden."}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/stopword-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "The quick brown fox jumps over the lazy dog and into the garden."
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.stopword_count",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |