Article · SEO
KD 0, DR 94: the Ahrefs metrics I stopped trusting
An Ahrefs export is a great source of keywords and a poor source of decisions. Here are six ways it misled my research, the trust table I now give my AI agent, and what I check instead.
The query had a Keyword Difficulty of 0. Every SEO knows what that suggests: an open door. Then I pulled the live search results. The median Domain Rating of the sites in its top ten was 94. A neighbouring query had KD 8 and a median DR of 92.
That was one of several moments during a niche research of about 1.4 million keywords when a column said one thing and the live results said another. Each time, the difference changed the conclusion. And each time, the first one fooled was the AI agent I had given the data to. A model treats every column in a CSV as equally true.
“KD is not a metric at all. Forget about it.” — what I told my agent on August 4, when it shortlisted a client’s keywords by KD.
Why this matters more with AI
Today everyone pipes exports into ChatGPT or Claude. The model doesn’t know that KD counts only links, that an empty cell is not a zero, or that search results data has a date. It will build a neat, confident plan on top of all of it.
The principle I ended up with: reliability is not completeness. A sparse column can be a real signal. In one set of 600,000 keywords only 18% had a CPC, but where it exists, it shows roughly what advertisers pay. A neat figure can be fiction. Traffic value gives you a dollar amount, but it is an estimate of an estimate of an estimate.
My agent once told me a visit in one niche was worth 19 times more than in another. Concrete and convincing. It stood entirely on traffic value. I asked it to think about how that number is calculated: estimated traffic times CPC, where the traffic is itself volume times an estimated click rate. The 19× was gone. The direction stayed: advertisers paid a dollar or more per click in one niche and cents in the other.
What keyword difficulty actually measures
KD is Ahrefs’ estimate of how hard it is to get into the top ten. It is built from one input: how many sites link to the pages that rank there, put on a logarithmic scale from 0 to 100. Ahrefs says it plainly — KD doesn’t take on-page factors into account, and you should study the top ten by hand.
So KD fails both ways. It can be zero while giants hold the top, because big brands rank on the strength of their whole domain, not on links to one page. Or it can be high while the top is weak and out of date.
What is a good keyword difficulty score?
There isn’t one. The only use I keep: a high KD tells a site with no links to look closer, because the top pages have many linking sites. A low KD tells you nothing. Look at the lowest DR in the top ten and at the live results instead.
Six ways the export misled us
1. KD 0 next to giants
The services world shows it best: a water-heater repair query with 150,000 monthly searches, KD 0, a CPC of $15 and a growing trend. Every column looked green. The live results were local plumbers, a big retailer’s repair service, a manufacturer and Yelp. KD was zero because local contractors don’t have backlinks, not because the niche is free. For an emergency HVAC repair query, all ten results were local contractors. A legal lead-generation query looked the same: KD 0, CPC $60.
2. An empty cell became a zero
In one export the median DR of ranking sites was 46. In the live results it was 85. Missing DR values had been written as zeros and pulled the median down. Nobody lied — the table simply didn’t say “unknown”.
3. A “weak blog” with DR 95
A blog on a free blogging platform looked like an easy competitor. It sat on a subdomain and inherited the platform’s authority: DR 95. In the same research a competitor’s “DR 0” turned out to be an empty field. Live, it was 45.
That doesn’t make DR useless. A real zero is one of the few numbers I trust. No links, and the site still ranks — that’s a fact. The caveat is small: Google may already see links that Ahrefs hasn’t found yet. The middle of the scale is different, because DR can be pumped. A DR 60 site can be weak, just stuffed with links. A DR 15 or 20 site can be strong. But zero is zero.
What I look for is a weak site in the top three or five. One of my exports was keywords with a DR 0 domain in the top five. The catch: Ahrefs knows the DR of the top only where it captured the results. No snapshot, no lowest DR, and the keyword quietly drops out of the filter.
4. Traffic potential of 28,000 for a 700-search query
Traffic potential measures the traffic of the current #1 page across all its keywords. It describes someone else’s page, not your opportunity. Read it relative to volume: much higher means the top page sits on a wide cluster, much lower means people get the answer without clicking, or the intent is narrow.
5. “No AI Overview” often means “no snapshot”
Search results data exists only for part of the keywords. In one keyword set it was 13% — 20,280 keywords out of 150,231. An empty value there means “not covered”, not “no feature”. When we measured AI Overviews live in one market, the share was 67%. The Ahrefs export for that market said 9%.
Keywords with an AI Overview, one market
The Ahrefs export said 9%. A live check found 67%.
My first worry was age. I told the agent the snapshots could be from 2015 and asked if it had checked the live results. When we checked, they were fresh: in the client’s export, 98% of dated rows were from June to August. Age wasn’t the problem. The empty rows were. The agent had divided by all rows, snapshot or not, and told me the client’s problem queries got AI Overviews five times more often than average. Counted only where a snapshot existed, it was 1.77 times.
Even our live measurement lied first. The API accepted one task per request, we sent ten, and the nine empty answers were recorded as “no AI Overview”: 157 false negatives out of 177 checks. The fix took minutes. Noticing took a contradiction: for one country, live showed 8% and the export 57%.
6. A volume that jumped overnight
“google search central hreflang guidelines” shows 1,200 searches a month. Open the 24-month curve and it is one month of 12,322 searches in November 2025, then about 50 a month. Volume is a 12-month average, so one spike becomes a steady-looking number for a whole year.
“google search central hreflang guidelines”: searches per month
Near zero for a year, one month of 12,322 searches in November 2025, then about 50 a month. The Volume column shows 1,200.
Other curves are too steady. The two-year curve for “googlebot” is the same twelve numbers twice, give or take one search. And in my Ukrainian export, about two thirds of the keywords with 20+ searches a month are five to ten times bigger after July 2025 than before it. For half of them, July 2025 is the single biggest jump in two years. That looks like a change in how the data is collected, not in what people search for — I can’t prove it, so I don’t build on it.
“googlebot”: two years of the curve, laid over each other
The monthly numbers from October 2025 to September 2026 repeat October 2024 to September 2025, give or take one search.
The trust table I give my AI
After these cases I wrote the rules down as a playbook my agent loads whenever it touches SEO data. The core is three levels.
1 · Facts
Who is in the live results today. A search feature seen on the snapshot date. Your own Search Console, analytics and click data. Build decisions on these.
2 · Signals
The shape of the 24-month trend. The order of magnitude of volume and CPC. DR near 0 for a site that ranks. The lowest DR in the top ten, where a snapshot exists. Use them to shortlist, with a caveat.
3 · Noise
KD. Traffic value. Organic traffic as an absolute. Traffic potential as an absolute. DR in the 15–70 range. Don't decide on these.
A few columns deserve a note of their own:
| Column | How I read it |
|---|---|
| Volume | A 12-month average. A million vs ten thousand — yes. 45K vs 52K — no. Seasonality and one-month spikes are hidden, so look at the monthly curve next to it. |
| SV trend | The most reliable computed metric: the curve is compared with itself. |
| CPC | A historical snapshot, true on the day it was captured. $1+ against $0.03 tells you whether there's money in the topic. The exact figure doesn't. I use it as a filter: one of my exports was keywords with a CPC from $15, sorted by three-month growth. |
| Growth | Noisy on small numbers: 10 → 30 is "+200%". |
| Organic traffic | Compare sites with each other, not as absolutes. One site showed 22,000 visits a month. All of it came from one junk query: its own domain name plus "contact". |
| Last update | Mandatory in every export. Every field that depends on the results is true only for that date. |
Why the trend beats the volume: volume is one average over twelve months. When my agent offered me a topic with a volume of 60, I asked what the point was — unless it had a trend. In one niche the cleaned export showed 2.76 million monthly searches. When we kept keywords with 100+ searches and a curve that wasn’t fading, only 27% of that demand was left.
What I check instead
- Export big. Ahrefs is an excellent source of keywords — up to 150,000 rows per export on the Enterprise plan, fewer on lower plans. Split your seeds so each group fits under the limit.
- Always include the snapshot date of the search results.
- New country? First export 50–100 keywords you know well and see how many cells are empty. That’s the real coverage.
- Shortlist by intent and trend, not by KD.
- Pull the live results for the shortlist. My instruction to the agent was simple: type in the queries and look — are there articles in the results at all? Who’s in the top ten tells you more than any metric — you recognise the big brands by name. Spot checks, not millions. Save everything you pull, domains and positions too, so you never pay twice.
- Label every conclusion: confirmed by data, interpretation, or needs checking.
How far is an export from the live page? In September we compared 62 Ahrefs positions for high-volume keywords with the live top 20. The site was there in 63% of cases and missing in 37%. Even the live page is not the last word. Google sometimes ranks a weak page because it has nothing better, or because links outweigh the content.
A client example: 45 keywords, 6 articles
On the content plan for happymonday.ua, a Ukrainian career platform, the agent’s first shortlist cut about 215,000 queries down to 63 topics. One of its filters was KD ≤ 30 — a number the agent later admitted it had picked out of thin air. The next list dropped KD, and we checked its 45 best candidates against the live results. 20 of them (44%) were pure noise. 13 were queries for job listings, where an article can’t rank. Only 6 clearly fit an article.
45 shortlisted keywords after a look at the live results
20 pure noise, 6 mixed results to check by hand, 13 job-listing queries, 6 fit an article.
For ten of the queries, the site already ranked on page one with its own job-listing page. An article would have competed with the client’s own page. The intent was decided by the type of page Google already shows — not by any column in the export.
About the author
Max Kiriienko
Tech Lead SEO & Marketing from Ukraine. I design growth strategies and build the pipelines, tools and teams that execute them.
Read next