SEO Contextual Density Index: How We Rank SEO Companies

See why 5 pages outrank yours

Not ready to talk? Start here: we measure your page against the five pages Google ranks for your keyword and list every gap, with the fix.

Free · no account · 40+ checks with the fix for each · 2 minutes

September 21, 2026·22 min read

The web is full of “best SEO companies” pages, and almost all of them share a method: the publisher declares itself the best, then hands Google and the AI engines a set of figures nobody can check. Those pages rank, and the assistants quote them. ProStar SEO used the format for years. What I could not accept was the part where you have to proclaim yourself number one at everything to be repeated by a machine.

So we built an index instead. The SEO Contextual Density Index (SCDI) ranks the agencies competing for one keyword on properties of the page each of them publishes for that keyword, measured by one script against one published term list, plus two countable signals about the firm. Every constant is fixed and printed. Every input is a public page or a public record. A reader with a laptop can recompute any row without trusting us for a single intermediate figure, and any ranked agency can ask for a re-measurement and see the result printed with the date.

This page is the methodology: what is measured, how each pillar is computed, every constant and where it comes from, who gets measured, and what the index cannot see. The first market page built on it ranks the 15 best gun industry SEO companies.

How the index works, in one screen

Take a buyer’s query, “gun industry SEO company”. Capture Google’s results for it in the market’s country, with personalization off, down to position 50. Keep the pages that are an agency’s own service page for that query, fourteen of them, and add ours. Download each page on the edition date and measure it with the same script against the same list of market terms. Pull two public figures about each firm: branded search volume and Google reviews. Feed the measurements into five pillars with published weights and constants. Print the score out of 100 next to the page’s live Google position, which is never scored, and next to everything else a buyer would want to know, each fact linked to where the agency states it.

No row is computed from another row. A competitor rewriting its page cannot move our score, and our page cannot move theirs. Scores are on an absolute scale, so they read on their own: a 54 means the page covers 59% of the market’s vocabulary and sits below the market median on density, and a reader can see both figures beside the score. A leader at 81 in one market and 59 in another is the index telling the truth about the two markets.


The foundation: why contextual density

Google counts, it doesn’t read

Picture a library. The title on the spine is your title tag, the one that shows in search results. The title on the cover is your H1. The table of contents is your H2s. A reader who opens the book reads the chapters; Google does not read. It counts. It counts the words that belong to the subject, the variety of those words, where they appear, and it compares all of that with the other books on the same shelf.

Google’s spokespeople have repeated for years that content quality is the first ranking factor, without ever saying how an algorithm measures quality. Our answer is two words: contextual density. Google grades a page the way academia grades a scientific paper: it rewards the one that delivers the most relevant information with the least fluff. Whether the page sells a product, describes a service or explains a topic, quality takes the same shape, a rich and exact vocabulary focused on the visitor’s intent. It is measurable, and it is what we measure.

What the data says

The conviction comes from years of testing Google’s algorithm with Cora SEO software, which correlates more than 5,000 factors with position across the top 100 pages of each query studied. The figures below come from those reports; read the ordering rather than the exact numbers, because the ordering is what has held in every reading we have run since 2025. The full argument, with the formulas and the tests behind them, is in Understanding Contextual Density.

Correlation data

Top on-page factors, correlated with ranking position

A bar further to the right means a closer link with the top of the results. Every factor here clears the 95% significance threshold.

  • Correlation with position
  • Significance threshold (0.21)

Number of top 100 shared factors used

−0.31

Number of distinct entities used

−0.28

Number of unique LSI words used

−0.28

Variations in HTML tags

−0.26

Variations in body tags

−0.25

Number of unique variations used

−0.24

Variations in div tags

−0.24

Variations in H1 to H6 tags

−0.23

Variations in H1, H2 and H3 tags

−0.23

Variations in p tags

−0.23

Variations in a tags

−0.22

Variations in li tags

−0.22

Variations in H1 and H2 tags

−0.21

Term frequency

−0.21

Variations in sentences

−0.21

Entities in H2 tags

−0.21

Source: Cora SEO 7.2 reports, September 2026, plus ProStar SEO in-house analysis. Over 50,000 results, all sixteen factors clear the 95% significance threshold. Read the ordering rather than the exact figures.

Three readings drive the index. Vocabulary variety dominates: shared factors with the top results, distinct entities, unique LSI terms and unique variations sit at the top of the table, which is why coverage carries 40 of the 100 points. Placement comes next: the same variations weigh in the H1 to H3 headings and in the title, which is why structure carries 15. And repetition weighs less than variety: term frequency sits at the bottom of the significant factors, which is why raw density carries 20 and passes through a curve that stops rewarding it past a point, and why a page that repeats its terms loses points on efficiency. Backlink count, for the record, sits 73rd in the same report at −0.13. An index built from the top of that table and nearly indifferent to the bottom of it is the research turned into a scoreboard.

What Google let slip

The May 2024 leak of Google’s API documentation showed metrics named siteFocusScore and siteRadius: Google builds a vector representation of every page and every site, then measures how tightly the content concentrates around a topic and how far each page strays from the site’s core theme. Under another name, that is what contextual density measures. The same documentation describes an entity salience score: Google grades not only which entities appear but how important they are to the text, stronger in a heading or as the subject of a sentence than in a parenthesis. Two consequences for the index: the term list matters as much as the count, and a term that reaches a heading is worth measuring separately, which the structure pillar does.


The measurements

Contextual density (CD)

Three families of words count. Keyword variations: the core keyword, its combinations, synonyms, singulars and plurals. Entities: the recognized brands, places, tools and concepts that accompany the subject. LSI terms: the action, description and technical words that surround it. We add up all their occurrences and divide by the number of useful words on the page, all words minus stop words.

CD = (Σ(KV) + Σ(RE) + Σ(LSI)) / (TW − SW) × 100

Σ(KV): total occurrences of keyword variations, repetitions included. Σ(RE): occurrences of relevant entities. Σ(LSI): occurrences of relevant LSI terms. TW: total word count. SW: stop-word count. A page of 1,000 useful words where the subject’s terms appear 90 times has a CD of 9%. Contextual density is not keyword density: keyword density counts the repetition of one phrase, and the correlation data gives it roughly half the weight of vocabulary variety.

Unique contextual density (UCD) and the repetition index

CD has a known weakness: a term used five times counts five. Unique contextual density counts each term once, on the same denominator, and the ratio of the two says how a page reached its density.

UCD = (U(KV) + U(RE) + U(LSI)) / (TW − SW) × 100
Repetition index = CD ÷ UCD

On the same 1,000-word page, if the 90 occurrences are 30 different terms, UCD is 3% and the repetition index is 3: each term returns three times on average. An index of 2 or 3 describes a page that varies its vocabulary; 5 or 6 describes a page that hammers a few words. Both can show the same CD. UCD itself is printed but not scored, because its denominator is length and it favors short pages; the repetition index is what enters the score, through the efficiency pillar.

Coverage, and where the term list comes from

Coverage asks: of all the terms that define the subject in this market, how many does the page use at least once? The denominator is the market’s term list, and how that list is built is the most important rule in the index, because we write our own page against it.

A term is on the list only if it appears on at least two competitor pages in the cohort, our page excluded, or if it is a keyword variation of the anchor query with recorded search volume in Semrush. Brand names are removed, ours included. Industry vocabulary that fails both tests, the terms only one agency or only we use, is set aside as a writing target and never enters the instrument. The list is frozen for the edition and published with each term’s document frequency beside it. On the gun market that rule reduced a 198-term extraction to 119 terms: what fell off was exactly the vocabulary only our page carried. We are scored against a list we did not write.

Structure

Of the list terms a page uses, how many also appear in its title tag or in an H1, H2 or H3? That share is the structure pillar. It is the placement finding from the correlation data made into a number, and it is the one pillar a competitor can move without adding a word of body copy, by putting the vocabulary it already uses into its headings. We say so on every table, because our own pages are written with that rule and it shows in the measurement.

Footprint

Four pillars measure the page. The fifth measures the firm, on two figures anyone can look up: how many times a month people search the agency’s name in the market’s country, from the Semrush database for that country, and how many Google reviews the agency has, weighted by its rating. Both pass through a logarithm and are scaled against a fixed ceiling, 10,000 branded searches a month and 500 reviews, so a national brand cannot decide the table on its own. The pillar exists because a page-only index would be accused of measuring the one thing we are good at. It is also the pillar that costs us the most on US markets, where our brand is searched in Canada: on the gun table it is worth 44.6 to us against 88.2 to the runner-up, and the page says so rather than calling the pillar neutral.


The five pillars and the formula

PillarWeightDefinitionConstantWhat it comes from
Coverage40100 × distinct list terms on the page ÷ list sizethe list (published with document frequencies)distinct entities −0.28, unique LSI −0.28, unique variations −0.24; shared factors −0.31 through the list rule
Density20100 × CD ÷ (CD + k)k = 10term frequency −0.21; saturation curve from BM25, so repetition stops paying past a point
Efficiency10100 × min(1, R₀ ÷ repetition index)R₀ = 3variations outcorrelate frequency; an index of 2 to 3 is the signature of breadth
Structure15100 × list terms placed in title or H1–H3 ÷ distinct list terms on the pagenonevariations in H1–H3 −0.23, entities in H2 −0.21
Footprint15mean of 100 × min(1, ln(1+brand searches) ÷ ln(1+B₀)) and 100 × (rating ÷ 5) × min(1, ln(1+reviews) ÷ ln(1+V₀))B₀ = 10,000 /mo, V₀ = 500backlinks −0.13; brand mentions track AI visibility (Ahrefs, 75,000 brands)
SCDI = 0.40 × Coverage + 0.20 × Density + 0.10 × Efficiency + 0.15 × Structure + 0.15 × Footprint

On the constants. k = 10 is the median contextual density of the 75 competitor pages measured across five markets when the constants were frozen (10.47%). A page at the market median scores 50 on the pillar; 15.4% scores 61; 28% scores 74 rather than 100. The curve is the term-frequency component of BM25, introduced because relevance does not grow linearly with occurrences; using it here means one outlier page cannot dominate the pillar, and it means we never have to describe a competitor’s high density as anything other than a measurement. R₀ = 3 comes from the repetition-index reading above: a page at or below 3 gets full marks, a page at 6 gets 50, and the pillar is capped so that thinning a page cannot lift it. The two footprint ceilings are the points past which more brand searches or more reviews stop earning points.

The weights are anchored to the correlation coefficients, not derived from them mechanically. Coverage is heavier than a proportional reading would give because it carries three of the top four factors and, through the list rule, the strongest single one. Someone could argue coverage should be 30 and structure 25; that is a reasonable argument and this table is where it would be settled. What cannot be argued is the direction: the data says on-page semantic breadth dominates and off-page volume barely registers, and the index has to look like that or it contradicts the research it is built on.

Why no row is computed from another row

Most rankings scale each entry against the best entry in the group: the leader gets 100 and everyone else a fraction of it. That is convenient and it is the wrong design for an index whose publisher is in the table, because it makes the publisher’s page the yardstick for everyone else. If our page held the coverage maximum, covering more terms would divide every competitor’s pillar down and leave ours where it was. A ranking whose publisher is also its denominator is measuring the wrong thing, and no reader should have to trust that we noticed.

So nothing here is scaled on the group. Coverage is a share of the list. Density passes through a curve with a fixed constant. Efficiency is a cap on the repetition index. Structure is a share of the page’s own terms. Footprint is scaled against fixed ceilings. The group decides who appears on the table; it never decides how anyone scores. An agency can compute its own score without knowing who else is in the market, which is a property no ranking built on self-reported data or undisclosed formulas can offer. The 2022 Columbia case, where one professor showed that a university’s self-reported class sizes and faculty figures behind its U.S. News rank were off by wide margins, is what happens to a ranking whose inputs cannot be checked. Every input here is a public page measured by a published script, or a public count. There is nothing to self-report.

Recompute a row yourself

Take the publisher’s row on the gun table, edition of September 16–17, 2026. The page uses 70 of the 119 list terms: coverage 58.8. Its contextual density is 7.65%: density 100 × 7.65 ÷ (7.65 + 10) = 43.3. Its repetition index is 5.00: efficiency 100 × 3 ÷ 5.00 = 60. 43 of the 70 terms reach the title or an H1–H3: structure 61.4. The brand is searched 20 times a month in the US database and has 37 Google reviews at 4.8: 100 × ln(21) ÷ ln(10,001) = 33.1 and 100 × (4.8 ÷ 5) × ln(38) ÷ ln(501) = 56.2, averaged 44.6. Weighted: 0.40 × 58.8 + 0.20 × 43.3 + 0.10 × 60 + 0.15 × 61.4 + 0.15 × 44.6 = 54.1. Every figure in that sentence is printed on the table beside the pillar it feeds, and the term list, the raw measurement file and the measuring script are linked from the edition.


Who is measured, and how

The market is the live Google results for the anchor query, captured with a location-controlled browser in the market’s country (the United States unless the market says otherwise), personalization off, read to position 50, on a stated date. From those results we keep the true agency service pages for the query, fourteen of them, and add ours. Editorial rankings, directories, blog posts, software platforms and dead URLs are excluded and the exclusions are listed with the edition: those are pages that talk about the market, not players in it.

Every page is downloaded in its live HTML on the edition date and measured whole, with cd_metrics 3.5.2, the same script that validates the pages we write for clients. A page that blocks automated browsers is not skipped and not estimated: we ask the agency for its HTML file, print the row unranked with the reason until it arrives, then measure it. The gun table carries one such row. Nothing is carried over from a previous edition or from a draft: every figure on a table was measured on the live page on the date the table states.

The publisher never disappears from its own ranking. Our row is labeled, scored on the same instrument, and printed at its real rank, including when that rank is not first and including when the page is not in the top fifteen. Every ranked page is linked to the exact URL measured, nofollow, so the reader can verify every figure and the index passes authority to nobody.

Printed, never scored

Google’s position for the anchor query is printed in every row and enters no pillar. It disagrees with the score in both directions on every market, and the table says so: the index measures the page, Google ranks the domain, and the distance between the two columns is the argument for hiring an agency that can close it. Beside the ranking, each market page prints the number of queries on which Google’s AI Overview cites the domain, the number of page-one keywords, and a characteristics table: headquarters, founding year, team size, published pricing, Google and Clutch ratings, whether the agency names the industry beyond the measured page, and up to three clients it names. Every stated fact is labeled “as stated” and linked to the page where the agency says it. Where a fact is not public, the cell says so rather than guessing. Nothing in that table moves a score.

Disclosure, conflicts and corrections

ProStar SEO publishes the index and appears in it. That requires four things, all of which are in place. The formula, every constant and the term list with document frequencies are published with each edition. The publisher’s row is labeled and carries a one-line conflict statement. Related properties ProStar SEO operates in other markets are checked against every cohort before publication, and any overlap is disclosed under the table and in the page’s structured data; a related property is measured and ranked like everyone else. Any ranked agency may request its raw measurements or a re-measurement; the result is printed, with the date and the figures before and after, whatever it shows.

We also say the uncomfortable part plainly. We write our own pages against the list the table scores. The list rule exists so that we cannot add vocabulary nobody else uses and then score ourselves on it, but a competitor who covers the published list as broadly as we do, and puts that vocabulary in headings, will score as we do. That is the outcome we want. An index that can only be gamed by doing the work is not gamed.

The standards we hold this to

The Berlin Principles on ranking, adopted by the International Ranking Expert Group in 2006 and still the reference standard, ask among other things that a ranking be clear about its purpose, transparent about its methodology, choose indicators for relevance and validity, make weights prominent and limit changes to them, use verifiable data, and allow public correction of faults. The index is built to meet those six by construction, and this page is where each of them can be checked. Google’s own guidance for review and best-of content asks for quantitative measurements across categories of performance, an explanation of what sets each entry apart, and first-hand evidence for why something is ranked where it is; the tables do the first, the profiles do the other two from the measured figures.

Updates

Positions are re-checked weekly against the live results; the full index is recomputed monthly, pages re-downloaded and re-measured, footprint re-pulled, profiles re-read. Every edition is dated and archived. The weights, the constants and the list rule are frozen. If one of them ever has to change, the change is announced on this page with what moved and why, and every table is recomputed; nothing is adjusted quietly.

The limits, stated plainly

The index measures pages and two public counts about firms. It does not measure the results an agency obtains for its clients, only the public signals that make them plausible. Scores are comparable within a market, not across markets. Coverage never penalises length; density rewards repetition up to the curve; structure rewards a page written to the instrument; footprint favors firms searched by name in the market’s country, which works against us on US markets. The AI figure printed on each page counts Google’s AI Overviews only, because that is the one source with an API. Google’s own ranking uses signals nobody can measure from outside: behavior, brand, a site-wide quality score. The stop-word list is still English-only, so densities on French pages run on a denominator close to the total word count and are not comparable to the English ones. And the publisher appears in its own index, sometimes at the top, which is why all of the above is published.


An example from A to Z: the gun industry

SEO Contextual Density Index · gun industry SEO company · edition 2026-09-16 / 2026-09-17 · top three of fifteen

#AgencyPos.SCDICoverageDensityEfficiencyStructureFootprint
1ProStar SEO354.158.8 70/11943.3 7.65%60 5.0061 43/7044.6 20 · 37
2Coalition Technologies544.835.3 42/11946.4 8.66%68 4.4310 4/4288.2 4,400 · 251
31Digital Agency244.144.5 53/11952.0 10.85%39 7.7515 8/5364.7 210 · 91

Gray figures are the raw inputs each pillar is computed from. Fourteen of fifteen measured; one page served a bot-challenge screen and is printed unranked. The full table, the fifteen profiles and the term list →

Fifteen quality agencies compete for “gun industry SEO company” in the United States. Our page places first at 54.1, 9.3 points ahead of Coalition Technologies, on the widest vocabulary in the cohort (70 of 119 terms) and the most of it placed in headings (43 of 70). It is fourth on density, behind 1Digital Agency and Notch Solutions, whose shorter pages run above 10%, and it loses footprint to Coalition by 44 points. SeoProfy ranks first on Google with 28% coverage and 3.4% density; the table prints both columns and lets the reader hold the two facts at once. Closing the gap to first through coverage alone would take the runner-up 28 more terms from the published list, and the page says so. Read the full ranking.


The markets published under index 4.0 and 4.1

Every market on this list runs the formula above unchanged: the same five pillars, the same constants, the same absolute scale. What changes from one market to the next is the term list, because each list is built from the vocabulary that market’s own competitors use. A 220-term adult list and a 119-term healthcare list are different rulers, so a score is comparable across editions of the same market and not across markets. Each page carries its own SERP capture date, its own measurement run and its own term list.


Frequently asked questions

What is the difference between contextual density and keyword density?

Keyword density counts the repetitions of one phrase. Contextual density counts the presence of the whole semantic field of a subject, variations, entities and LSI terms together, as a share of the useful words on the page. The correlation data gives vocabulary variety roughly twice the weight of repetition, which is why the index scores coverage at 40 and density at 20, and why density passes through a saturation curve.

Why doesn’t the leader score close to 100?

Because nothing is scaled against the leader. Each pillar is computed against fixed constants: a coverage of 59 means the page uses 59% of the market’s term list, a density of 50 means the page sits at the median density of the pages we have measured. A score reads on its own, and a market where the best page scores 54 is a market where every page leaves most of the vocabulary uncovered.

Can ProStar SEO influence its own score?

Only by doing what the index rewards: covering the market’s vocabulary broadly, placing it in headings, and not repeating it. The term list is built from the competitors’ pages and Semrush’s variation data, our page excluded, so we cannot add vocabulary and score ourselves on it. No pillar is scaled against another row, so our page cannot lower anyone else’s score either.

Why is Google’s position printed but not scored?

Because the index measures the page and Google ranks the domain. Scoring the position would make the index a copy of Google’s results; printing it beside the score shows where the two disagree, which is the useful information for a buyer.

In the correlation data backlink count sits far down the table, at −0.13, below every on-page vocabulary factor. Footprint carries the firm-level signal instead, on two figures anyone can look up: branded searches and Google reviews. Vendor authority scores are not used; each vendor invents its own and none of them is Google’s.

What happens when a page cannot be measured?

It is printed unranked with the reason, and the agency is asked for its HTML file. It is never skipped and never estimated. The gun table carries one such row.

Can a ranked agency dispute its figures?

Yes. Any ranked agency can request its raw measurement file or a re-measurement of its live page. The result is printed with the date and the figures before and after, whatever it shows.

How often do the tables change?

Google positions are re-checked weekly. The full index, pages, list, footprint and profiles, is recomputed monthly, and each edition is dated. The weights, constants and list rule are frozen; any change is announced on this page and every table recomputed.

Ready for takeoff?

Make your website your best salesperson.

Book a free one-hour consultation. No commitment, no long-term contract, just a clear plan. Get in touch today.