Skip to content

backlink-guard 0.5.0

Choose a tag to compare

@zhuyansen zhuyansen released this 16 Oct 08:49

中文说明在英文之后。

Verdicts you can act on. In 0.4.1 a single caution finding made a caution, so most sites came out caution. Now caution takes two caution findings, and the spam score counts from 50. Every row also carries a risk number (3 for each avoid finding, 1 for each caution) to order sites with the same verdict.

On 100 sites no rule had been tuned on (40 that Ahrefs marks SPAM, 60 it does not), the same saved results graded with each version's rules:

0.4.1 rules 0.5.0
SPAM sites flagged 38 of 40 28 of 40
Normal sites flagged 46 of 60 21 of 60

The 12 SPAM sites let through had one weak finding at most, 11 of them under 1,500 visits a month. Every normal-labelled site that 0.5.0 calls avoid, on this set and on the first 90, does not load or has no pages in Google. The risk number ranks a SPAM site above a normal one about 75% of the time.

New

  • Link policy and Value beside the verdict: what a link there would mean under Google's link spam policies (one finding is enough), and what a listing can bring (the site's reach, or none when nobody can reach it).
  • Checkout links shared across sites (Stripe, Gumroad, Lemon Squeezy, Polar, Creem, Dodo, Paddle): a network selling links through one checkout link (checkout_network), or a gambling or adult product injected into hacked sites (injected_checkout). On 16 test sites, 9 of the 10 bad ones went from caution to avoid, and none of the 6 that merely cite those products got a checkout flag.
  • The shared spam-link list (backlink-spam-list): a listed site is avoid, with the entry's evidence. Found a network it lacks? Report it.
  • One owner across sites (same_owner): sites in one check reporting to one AdSense, Analytics, Tag Manager, Clarity or Facebook pixel account.
  • Age, visitors and identity: registration date, where visitors come from (AI assistants included), a lapsed domain picked up again (reregistered), pages that invite guest posts (guest_posts, a note), the site's Google Knowledge Graph type. --deep adds Ahrefs DR, technology, ChatGPT mentions and Semrush numbers.
  • recheck: the sites in your log checked again and compared with the last look. Monthly is enough.
  • vet --referrals ga4.csv: what each site actually sent you, from your GA4 export, beside its verdict.
  • scripts/regress.py: grade saved results again after a rule change, in seconds and for free.

Changed

  • Free checks first: a site its own pages already put at avoid (dead, parked, a shortener, a network page, a link seller) gets no paid check.
  • incomplete: a site that looked ok while a key check failed is no longer reported as ok.
  • A fall in visits in the newest month of the data is a note (traffic_drop) until the next month confirms it: in September 2026 one visits estimate halved for many sites whose Google traffic held.
  • A failed site: lookup, or a home page that gives no answer, is asked once more before it counts.
  • Sites with 100,000 visits a month or more (github.com, pypi.org) are no longer read as badge networks.

Upgrading from 0.4

  • A site with one caution finding now reads ok; the finding is still listed under Why.
  • --json rows gain risk, policy, value, missing and, when paid checks were skipped, skipped. grade can be incomplete.
  • vet reads the shared list from GitHub once a run and keeps it a day; BACKLINK_SPAM_LIST_URL points it at another copy. A list that cannot be read is reported as an error of the run, never read as empty.

Install

git clone --branch v0.5.0 https://github.com/zhuyansen/backlink-guard
cd backlink-guard
python -m backlink_guard vet <site> --free

Python 3.10 or newer, standard library only. Or pip install "git+https://github.com/zhuyansen/backlink-guard@v0.5.0".


中文

结论终于能直接拿来用了。 0.4.1 里一条 caution 信号就判「谨慎」,大部分站都落在这一档。现在要两条 caution 信号才判谨慎,垃圾分从 50 分起算。每行还多了一个风险分(每条 avoid 记 3 分,每条 caution 记 1 分),用来给同一档的站排先后。

在 100 个规则从没见过的站上(Ahrefs 标了 SPAM 的 40 个、没标的 60 个),把同一批结果按两个版本的规则各评一遍:

0.4.1 规则 0.5.0
标出的 SPAM 站 40 个里 38 个 40 个里 28 个
误标的正常站 60 个里 46 个 60 个里 21 个

放过的 12 个 SPAM 站,每个最多只有一条弱信号,其中 11 个每月访问不到 1,500。在这批站和最初那 90 个站里,被 0.5.0 判 avoid 的「正常」站全都打不开,或在 Google 查不到页面。风险分把 SPAM 站排在正常站前面的概率约为 75%。

新增

  • 「链接政策」和「价值」两栏,放在结论旁边:在这里拿链接,按 Google 的链接垃圾政策意味着什么(一条就算);以及收录能带来什么(对方的触达,没人能访问时为「无」)。
  • 收款链接查站群(Stripe、Gumroad、Lemon Squeezy、Polar、Creem、Dodo、Paddle):一批站挂同一个收款链接卖外链(checkout_network),或赌博、成人产品的收款链接被注入被黑的站(injected_checkout)。在 16 个测试站上,10 个坏站里 9 个从 caution 升到 avoid;只是引用这些产品的 6 个站,没有一个被标出收款链接问题。
  • 共享的 spam 外链名单(backlink-spam-list):名单上的站直接判 avoid,并附上条目里的证据。发现名单里没有的站群,欢迎提交。
  • 同一个人的站(same_owner):同一次检查里,几个站用的是同一个 AdSense、Analytics、Tag Manager、Clarity 或 Facebook 像素账号。
  • 站龄、访客和身份:注册日期、访客从哪来(包括 AI 助手)、过期后被重新注册的域名(reregistered)、招客座稿的页面(guest_posts,提示级)、这个站在 Google 知识图谱里的类型。--deep 还会加上 Ahrefs DR、技术栈、ChatGPT 提及次数和 Semrush 数据。
  • recheck:把记录里已经提交或上线的站再查一遍,和上次比较。每月一次就够。
  • vet --referrals ga4.csv:读你的 GA4 导出,把每个站实际给你带来的访问放在结论旁边。
  • scripts/regress.py:改规则之后,用存下的结果重新评级,几秒钟,不花钱。

改动

  • 先做免费检查:自己的页面已经能判 avoid 的站(打不开、停放域名、短链、站群页面、卖外链),不再花钱做付费检查。
  • incomplete(待定):看起来没问题、但有关键检查失败的站,不再报成 ok。
  • 数据里最新一个月的流量下跌,先只作提示(traffic_drop),等下个月确认:2026 年 9 月有一份访问量估算,让很多 Google 流量没变的站看上去腰斩了。
  • site: 查询失败、首页完全没有响应的,都会再查一次才算数。
  • 月访问 10 万以上的站(github.com、pypi.org)不再被判成「徽章站群」。

从 0.4 升级

  • 只有一条 caution 信号的站现在判 ok,这条信号仍然列在「原因」里。
  • --json 的每一行新增 risk、policy、value、missing;跳过了付费检查的还有 skipped。grade 可能是 incomplete。
  • vet 每轮从 GitHub 读一次共享名单,缓存一天;可以用 BACKLINK_SPAM_LIST_URL 指向别的副本。名单读不到时,会作为本轮的错误报出来,不会当成空名单。

安装

git clone --branch v0.5.0 https://github.com/zhuyansen/backlink-guard
cd backlink-guard
python -m backlink_guard vet <site> --free

需要 Python 3.10 或更新版本,只用标准库。也可以 pip install "git+https://github.com/zhuyansen/backlink-guard@v0.5.0"。