hc-rank
Skill0 starsChanged 3 months agoMITView on GitHub
Look up a domain's Harmonic Centrality (HC Rank / CC Rank) from Common Crawl's Web Graph — single or bulk — and use it to prioritize link building toward the web's link core. Reads Common Crawl's published domain-ranks file directly, so it does not depend on the (currently erroring) webgraph.metehan.ai tool. Triggers on "harmonic centrality", "HC rank", "CC rank", "crawl priority", "web core", "distance to core", "metehan webgraph", "AI visibility audit centrality check", or wanting to score/prioritize domains by proximity to the web core for link building.
In this repository11 other files it gives its agents.
- codexSkill
- email-strategySkill
- entity-consistency-sweepSkill
- framer-code-componentsSkill
- goalSkill
- humanizerSkill
- keyword-guidelinesSkill
- migration-analysisSkill
- roastSkill
- session-handoffSkill
- surfer-keyword-testerSkill
The file
Files
HC Rank — Harmonic Centrality from the Common Crawl Web Graph
Harmonic Centrality (HC) measures a domain's proximity to the web's link core — how few hops, on average, it sits from everything else. Common Crawl uses HC to set crawl priority: more-central domains are crawled deeper and more often, so more of their pages land in the monthly archives that train LLMs (ChatGPT, Gemini, Claude, Perplexity). HC is not PageRank: PageRank measures link volume (popularity); HC measures distance to the core. A single link from a core-connected domain lifts centrality more than dozens from peripheral ones — which is exactly why this matters for link building.
This skill reads Common Crawl's published domain-level ranks file directly. The community tool webgraph.metehan.ai is just a front-end over the same data (and currently errors); going to source never errors and scales to bulk lists.
Quick start
PY=/c/Python314/python # Windows python.org build
# 1) One-time per release (~2.35 GB download, cached OUTSIDE any cloud-synced folder).
# duckdb is OPTIONAL and auto-skipped on Python 3.14 (it segfaults there); the
# build still produces a working streaming-mode index and lookups run fine.
# A crash in the optional parquet step can no longer strand the index.
$PY scripts/hc_rank.py build
# 2) Look up domains
$PY scripts/hc_rank.py lookup google.com bbc.co.uk yourclient.com
# 3) Bulk a prospect list -> XLSX (for the link-building tracker)
$PY scripts/hc_rank.py bulk prospects.txt --xlsx prospects_hc.xlsx
# Discover newer releases, then build a specific one
$PY scripts/hc_rank.py releases
$PY scripts/hc_rank.py build --release cc-main-2026-mar-apr-mayThe cache lives at %USERPROFILE%\.cache\cc-webgraph\ by default (override with the
CC_WEBGRAPH_DIR env var). Never point it inside the cloud-synced tree — it would try to sync
multiple GB.
What you get per domain
| Field | Meaning |
hc_rank (harmonicc_pos) | The HC Rank. 1 = most central. Lower = closer to the core = higher crawl priority. |
hc_value | Raw harmonic centrality value (higher = more central). |
hc_percentile | Position relative to all ~156M indexed domains. |
hc_grade | Heuristic band (see below). |
pr_rank / pr_value | PageRank position/value — shown for contrast, do not optimize for this. |
n_hosts | Subdomains seen under the domain. |
Grade bands (by HC rank position — documented heuristic)
| HC Rank | Grade | Read |
| ≤ 10,000 | A+ Web core | Elite hubs (google, bbc, github…). |
| ≤ 100,000 | A Near-core | Strongly crawled; great link source. |
| ≤ 1,000,000 | B Strong | Healthy crawl priority. |
| ≤ 10,000,000 | C Mid | Crawled, but not prioritized. |
| ≤ 50,000,000 | D Peripheral | Shallow/infrequent crawling — a strategic risk. |
| otherwise | E Edge | Effectively stranded at the edge of the graph. |
How HC is calculated (so you can explain it to clients)
For a domain x, harmonic centrality = Σ over every reachable domain y of 1 / distance(x, y), where distance is shortest-path hops in the host/domain link graph. Unreachable pairs contribute 0 (1/∞), so nodes close to many others score high. Common Crawl computes it on its ~300M-node graph with the LAW WebGraph framework using HyperBall / HyperANF (a HyperLogLog approximation of the neighbourhood function) — an approximation, refreshed roughly monthly, not an exact all-pairs computation. Treat HC as a directional signal.
The data (verified)
- Latest release:
cc-main-2026-mar-apr-may(set inLATEST_RELEASEin the script). - Domain ranks file (free, no auth, ~2.35 GB gz, ~156M domains):
https://data.commoncrawl.org/projects/hyperlinkgraph/<release>/domain/<release>-domain-ranks.txt.gz - TSV columns, sorted by
harmonicc_posasc:harmonicc_pos harmonicc_val pr_pos pr_val host_rev n_hosts host_revis the reversed registered domain:com.google,uk.co.bbc(= bbc.co.uk). The script reverses inputs viatldextract(handles multi-part suffixes like.co.uk).
See references/harmonic-centrality.md for the full method,
the metehan.ai relationship, host-level option, and caveats.
Using HC Rank in link building
A link's value for AI visibility scales with the linking domain's proximity to the core, not just its DR/DA. Workflow:
- Client baseline —
lookup yourclient.complus its competitors. The gap in HC Rank is the crawl-priority gap to close. Put it in the AI-visibility / link-building deliverable. - Score prospects —
bulk prospects.txt --xlsx ..., then prioritize by HC grade. AB/A/A+linking domain transmits real core proximity; aD/Edomain barely moves it even at high DR. - Integrated — the
backlink-researchskill calls this in its scoring phase and addsHC Rank+HC Gradecolumns to the prospect tracker (see that skill's Phase 3d).
Raising a site's HC = earn links from core-connected domains AND keep CCBot/AI crawlers unblocked (robots.txt + WAF) so those new links are actually crawled. HC and crawl access are complementary — a great link the crawler can't reach buys nothing.
Notes & limits
- HC is an approximation, refreshed ~monthly — re-
buildwhen a newer release lands. - Domain-level only (matches what metehan reports). Host-level is a future option.
- Pure-stdlib by default (gzip + csv) — no required installs.
tldextractimproves domain parsing,openpyxlenables XLSX, andduckdb(optional, non-3.14 only) adds a Parquet fast-path. All are best-effort; the skill runs without any of them. - The build is download-bound (~2.35 GB once). In parquet mode lookups are sub-second;
in streaming mode, core domains resolve in ~1s but a NOT-FOUND / peripheral domain
scans the whole .gz (~5 min). For big prospect lists, run on a Python with duckdb
(3.11/3.12) so
buildproduces the Parquet, or expect longer bulk streaming passes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

