
# backlink-guard
**Check a link source before you submit to it, the link after it goes live, and your own backlinks for link spam.**
[](https://pypi.org/project/backlink-guard/)
[](https://pypi.org/project/backlink-guard/)
[](https://github.com/zhuyansen/backlink-guard/blob/main/LICENSE)
[](https://github.com/zhuyansen/backlink-guard/stargazers)
[](https://github.com/zhuyansen/backlink-guard/network/members)
[](https://pepy.tech/projects/backlink-guard)
[](https://github.com/zhuyansen/backlink-guard/commits/main)
[](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.zhuyansen/backlink-guard)
[](https://agentskillshub.top/skill/zhuyansen/backlink-guard/)
[](https://skills.sh/zhuyansen/backlink-guard)
⭐ **37 of 40 Ahrefs-marked spam sites kept from "submit"**, on 100 sites it had never seen · on PyPI, the official MCP Registry and skills.sh
[Quick start](#quick-start) · [How well it works](#how-well-it-works) · [Where to be](#where-to-be-find) · [Competitors](#links-your-competitors-earned-competitors) · [AI answers](#where-ai-answers-come-from-cited) · [Keys](#keys) · [Agents and MCP](#use-it-from-an-agent-the-skill-and-an-mcp-server) · [中文说明](https://github.com/zhuyansen/backlink-guard/blob/main/README.zh-CN.md)
Find the pages your searchers already land on, the sites that link to your competitors and not to you, the sites Google's AI Overviews cite for your keywords, and what AI assistants answer when asked for what you make; check a link source **before** you submit your site to it, check the link **after** it goes live, look at your **own** backlink profile for the patterns Google calls link spam, and find the links that point at pages of yours that are gone or redirect badly.
Most backlink tools help you send more. This one tells you where not to send, and when to slow down.

## Quick start
```bash
pip install backlink-guard
backlink-guard vet mcpservers.org turbo0.com navi.tools producthunt.com clawhomepage.com
```
Python 3.10 or newer, no dependencies; `uvx backlink-guard vet …` runs it without installing. With no key it reads the sites' own pages, for free (`--free` asks for just that). The [keys](#keys) (GoAnyAPI, and Glasser or AIsa) add rating, visits, Google's index and spam scores: about $0.17 for one site and $0.46 for thirty, so check the sites you are considering in one run.
Checked with both keys on 2026-10-13 and 14:
| Site | Action | Verdict | Risk | Link policy | Value | Rating | Visits a month | Spam score | Why |
|---|---|---|---|---|---|---|---|---|---|
| mcpservers.org | 🆓 free only | ✅ ok | 1 | ⚠️ sells followed links | high | 71 | 715,667 | 12 | – |
| turbo0.com | 🆓 free only | ⚠️ caution | 4 | ⚠️ sells followed links; asks for a link back | medium | 81 | 2,218 | 5 | A high rating with almost no visitors: the rating comes from links, not readers; It lost most of its Google search traffic in the last year and has not won it back |
| navi.tools | ⛔ skip | ⛔ avoid | 3 | – | none | – | – | – | The domain is parked or for sale |
| producthunt.com | ✅ submit | ✅ ok | 0 | – | high | 91 | 4,339,954 | 6 | – |
| clawhomepage.com | 💤 low value | ✅ ok | 0 | – | low | 16 | 55 | 16 | – |
**Action** is what to do with the site: skip, look first, free only, low value or submit. It reads three answers that are also shown apart. **Link policy**: what a link there would mean under Google's link spam policies, one finding being enough; mcpservers.org sells followed links, so list there for free and never pay. **Value**: what a listing can bring, which is the site's reach, or none when nobody can reach it (dead, parked, dropped by Google, a shortener, a network page). The **verdict** weighs every finding: one avoid finding makes avoid, and caution takes two caution findings. Risk is 3 for each avoid finding and 1 for each caution. A site its own pages put at avoid, like navi.tools, gets no paid check.
Every finding comes with the text or the numbers it was read from:
> **turbo0.com** — ⚠️ A high rating with almost no visitors: the rating comes from links, not readers. *rating 81, about 2,218 visits a month.* ⚠️ It asks for a link or badge back as a condition. *"Free $0 … Backlink to our site is required."* (Google: Excessive link exchanges, or requiring a link as part of an arrangement)
Sites that share a page template or an analytics or ads account, with each other or with sites from an earlier check on the same machine, are flagged as one operator's. When most of them have something else against them and the [shared spam-link list](https://github.com/zhuyansen/backlink-spam-list) lacks them, the report ends with a link to a filled-in report for that list; nothing is sent until you submit it.
## How well it works
The rules were chosen on 100 sites they had never seen (2026-10-16): 40 that Ahrefs marks SPAM and 60 it does not.
| | 0.4.1 rules | 0.6 |
|---|---|---|
| SPAM sites flagged | 38 of 40 | 28 of 40 |
| Normal sites flagged | 46 of 60 | 21 of 60 |
| SPAM sites with the action "submit" | – | 3 of 40 |
- Every normal-labelled site called avoid does not load or has no pages in Google.
- Of 16 sites around shared checkout links, all 10 network or hacked sites come out skip, and 5 of the 6 that merely cite those products come out submit.
- What a listing brings follows reach: on two sites' analytics, 2 of 37 and 1 of 73 referring domains rated low had sent a visit, against 10 of 14 and 2 of 7 rated high.
- The ten well-known directories and communities all come out submit.
Nine tests, with their data and what each changed: [docs/validation.md](https://github.com/zhuyansen/backlink-guard/blob/main/docs/validation.md).
## Where to be: find
A link is first a way in for visitors. A page that ranks for your keyword already gets the people looking for what you make, so a mention there is the most relevant link there is.
```bash
python -m backlink_guard find "claude skills" "claude code skills" "agent skills" --site agentskillshub.top
```
| Keyword | Searches a month (US) | Difficulty |
|---|---|---|
| claude skills | 40,500 | 27 |
| claude code skills | 12,100 | 30 |
| agent skills | 8,100 | 38 |
| Page | Kind | Ranks | Visitors from these searches | What to do |
|---|---|---|---|---|
| The Claude "Skills" Feature (medium.com) | article | #3 claude skills; #1 claude code skills | about 7,795 | Offer the author what the page lacks |
| Claude can now use Skills (r/ClaudeAI) | community | #2 claude skills | about 6,399 | Answer where it helps; the visitors are the value |
| addyosmani/agent-skills (GitHub) | repo | #1 agent skills | about 2,236 | An integration or a pull request, not a link request |
| Best Claude Skills in 2026 (opxskills.com) | list | #10 claude skills | about 972 | Ask to be added |
| ClaudeSkills, the curated library (claudeskills.com) | directory | #8 claude code skills | about 399 | Submit, after `vet` says it is worth it |
| agent-skills · GitHub Topics | directory | #9 agent skills | about 219 | Add the `agent-skills` topic to your repository |
Three keywords, 30 results each: $0.027 on 2026-10-14. Visitors are monthly searches times the share of clicks a position usually gets, a size and not a count. `--vet` then vets the directories and article sites it found; pages on GitHub, Medium, YouTube or Reddit are judged by the page and its author, not the platform.
## Links your competitors earned: competitors
The sites that already write about your competitors are the ones to tell about what you make. For each competitor, `competitors` lists the referring domains first seen in the last 7 days (the ones already linking to you left out), then the sites that link to two or more of the competitors and not to you, the link intersect. Each comes with a page that links, what kind of page it is and what can honestly be done there.
```bash
backlink-guard competitors yoursite.example --vs competitor-a.example competitor-b.example competitor-c.example
```
> ### competitor-a.example: 941 new referring domains; 1 already link to you, left out
>
> | Site | Rank | First seen | Linking page | Kind |
> |---|---|---|---|---|
> | agenthub.example | 195 | 2026-10-19 | [Skill install and guide](https://agenthub.example/en/p/skill-guide) | article |
> | toolsdir.example | 23 | 2026-10-16 | [Agent Skills Marketplace](https://toolsdir.example/tools/agent-skills-marketplace) | directory |
>
> ## Sites linking to two or more of them, not to you
>
> | Site | Links to | Rank | First seen | Linking page | Kind |
> |---|---|---|---|---|---|
> | compare.example | competitor-a.example, competitor-b.example | 25 | 2026-10-09 | [Best Claude skills marketplaces compared](https://compare.example/compare/claude-skills-marketplaces/) | list |
> | indies.example | competitor-b.example, competitor-c.example | 51 | 2026-05-18 | [Competitor B, made by indies](https://indies.example/products/competitor-b) | directory |
Left out, and named at the end: the sites on the [shared spam-link list](https://github.com/zhuyansen/backlink-spam-list), the links that score 50 or more for spam (every row carries the score), and three or more sites whose linking pages share one title, one network's template, with a filled-in report for the list. On 2026-10-20, 86 of one competitor's 100 newest referring domains were such pages. Rank is what the site's links pass to the competitor, on the backlink index's 0 to 1,000 scale; first seen is when its crawler found the link.
The intersect is one call: the domain intersection in its partial mode returns the domains linking to at least two of the sites given (its page says all of them; tried live, it is two or more). About $0.025 a call, 2N + 2 calls for N competitors: three competitors cost $0.20 on 2026-10-20. `--max-usd` caps a run ($0.30 unless set): a call is made only while its estimate still fits, answers cached in the last 7 days are free, and the report names what the cap left out. Vet a site before you spend time on it; never pay for a followed link.
## Where AI answers come from: cited
An AI Overview cites the pages it was written from. For each keyword, `cited` reads Google's first page with its AI Overview (US, English), says whether the overview cites your site and where you rank, and then counts the sites cited across all your keywords: the places where a mention gets you into the answer.
```bash
backlink-guard cited yoursite.example "claude skills" "agent skills" "claude code skills" "agent skills hub"
```
| Keyword | AI Overview | Sites cited | You | Your position (organic) |
|---|---|---|---|---|
| claude skills | yes | 7 | not cited | not in the top 10 |
| claude code skills | yes | 3 | not cited | not in the top 10 |
| agent skills hub | yes | 7 | ✅ cited: / | not in the top 10 |
| Site | Keywords | Citations | Page cited | Kind |
|---|---|---|---|---|
| github.com | 4 | 6 | [a curated list of Claude skills](https://github.com/) | repo |
| youtube.com | 3 | 8 | [Claude Skills, explained](https://www.youtube.com/) | video |
| skillslist.example | 1 | 1 | [The 68 best Claude skills](https://skillslist.example/en/skills/) | list |
$0.002 a keyword on 2026-10-20, $0.004 when the overview loads after the page; `--max-usd` caps it ($0.10 unless set). A keyword with no AI Overview is said so, which is not the same as not being cited: Google shows an overview when it judges one helpful, and another day, place or searcher can differ.
## What AI assistants answer: questions and asked
People also ask ChatGPT, Perplexity, Claude and Gemini directly, and each of them searches the web before it answers. `questions` writes the questions to ask; `asked` puts them to five assistants and keeps what each one searched for, read and cited.
```bash
backlink-guard questions "a directory of agent skills" --plain > questions.txt
backlink-guard asked yoursite.example --file questions.txt --name "Your Brand" --rank
```
- **questions**: ChatGPT, Claude and Gemini each write the questions they expect to be asked (no web search), merged once: about $0.01.
- **asked**: each question to ChatGPT (its own interface), Google's AI Mode, Perplexity, Claude and Gemini (with their web search). For each assistant, how many answers wrote your domain, gave only your name, cited you, or named a site under your name with another ending (whose mentions are not counted as yours); then the sites and pages cited most, each with its kind and what can honestly be done there, and the searches the assistants ran (AI Mode shows none).
- **--rank**: each of those searches on Google and Bing (US, English, top 20). An assistant reads what its search returns, so a site missing from the results is rarely read at all, and one that ranks without being cited was passed over. The report says where you rank, and puts the sites on the first page of the most searches next to the answers that cited them.
On 2026-10-26, for agentskillshub.top: 8 questions, 56 answers, 67 searches. No answer read or cited the site; it was in Google's top 20 for 3 of the 57 searches Google answered and in Bing's for none of 67. The work is in the search results first.
ChatGPT and Perplexity are asked twice, since their answers vary most: about $0.12 a question with the default samples, $0.0035 a search on each engine for `--rank`. `--max-usd` caps the whole run ($1.00 unless set). Answers asked in the last 7 days come from the cache, so `--rank` after a run costs only the lookups.
## Why
Google's spam updates came in March, June, August and September 2026. "Buying or selling links", "excessive link exchanges", "low-quality directory or bookmark site links" and "using automated programs or services to create links to your site" are all on [Google's list of link spam](https://developers.google.com/search/docs/essentials/spam-policies#link-spam). Directory lists passed around for link building go stale fast and say nothing about any of this.
A verdict here is a set of signals a person can check. It is not Google's judgment: nobody outside Google can tell whether one link is counted, ignored or held against a site. Google ignores most junk links. What the tool is good for is not wasting effort on dead, empty or link-selling sites, and not building the pattern yourself.
## What it checks
| Signal | How | Source | Cost |
|---|---|---|---|
| `find`: the pages that rank for your keywords, by the visitors they get from those searches, and what kind each is | Google's top 30 for each keyword, and its monthly searches | Glasser or AIsa | $0.005 a keyword, plus $0.012 |
| `--topic`: where a site ranks for your keyword, and whether its pages write about it | the same search; the site's pages | Glasser or AIsa, the site | $0.005 a keyword |
| Dead, or a parked or expired domain | reads the home page; one that gives no answer at all is asked again 5 seconds later | the site | free |
| Sells followed links or posts | a price next to "dofollow", "guest post", "link insertion" on the home, submit and pricing pages | the site | free |
| Pages that invite guest or sponsored posts (a note), found even when the home page does not link to them | Google search for its "write for us" and guidelines pages | GoAnyAPI | $0.002 |
| Asks for a link or badge back | the same pages | the site | free |
| Links out to gambling, adult, loan or essay-mill sites | outbound links on the home page | the site | free |
| A URL shortener, or a link network's template page ("