Backlink Void scores backlink prospects from 0 to 100, audits existing links for spam and toxicity, and generates a Google Disavow file, for SEO specialists, link builders and agencies who want a transparent, no-API way to qualify prospects.
The tool ranks every domain in a link list from 0 to 100 by how valuable a backlink from it would be for your site, weighing relevance, authority, guest-post friendliness, domain health, TLD / language / geo fit, and spam safety. Unusable sources (piracy, adult, gambling, dead, parked, de-indexed) are moved to an Avoid list, and spam or toxic ones are compiled into a Google Disavow file that can be uploaded to Search Console.
There are two editions from one codebase: a PHP web app for cPanel and shared hosting, with a browser UI and no command line, and a Python CLI for automation and cron. Neither uses a database or a build step.
A Backlink Notif monitor watches your existing backlinks and sends a weekly Telegram alert when one of them turns spam or toxic.
- Prospect scoring — six weighted factors with a per-row breakdown of why each domain scored as it did.
- Avoid list — toxic neighbourhoods plus dead, parked and de-indexed pages are excluded from prospects automatically.
- Google Disavow tab — downloads
disavow.txtwithdomain:lines and the matched signal as a comment. Only domains identified as spam or toxic are listed. - Exports — PDF, Excel (
.xls) and CSV, scoped to all results or to guest-post-only rows. - Backlink Notif — paste your live backlinks and a Telegram bot token to get a weekly message listing newly spam or toxic domains. Each start runs for one year, driven by cron.
- Login gate — username and password, asked once per browser and then remembered for about a year via a signed cookie.
- Refresh-safe encrypted cache — large lists are analysed once; a refresh re-serves an encrypted, per-browser cached report instead of re-running, with a loading timer.
- Encryption at rest — monitor settings and cache are AES-256-CBC encrypted with HMAC authentication. The Telegram token and chat id are never rendered to the page.
- No dependencies, no database — the Python CLI uses only the standard library; the PHP app needs cURL and OpenSSL.
Keywords: backlink checker, backlink audit, SEO toxicity audit, link prospecting tool, Google Disavow file generator, toxic backlink detector, spam link checker, link building tool, PHP SEO tool, Python SEO CLI, Telegram backlink monitor.
| Layer | Technology |
|---|---|
| Web app | PHP 7.4+ (object-oriented, one class per file), cURL and OpenSSL |
| CLI | Python 3.8+ (standard library only) |
| Crypto | AES-256-CBC, encrypt-then-HMAC, signed login cookie |
| Storage | None. Flat encrypted files for monitor state and cache |
| Alerts | Telegram Bot API, weekly, via cron |
| Output | HTML report, PDF, Excel (.xls), CSV, disavow.txt |
- Web app: PHP 7.4+ with the cURL and OpenSSL extensions, both standard on cPanel.
mbstringis used if present but is not required. - CLI: Python 3.8+. No packages to install.
- In cPanel File Manager, upload the whole project into a folder under
public_html, for examplepublic_html/backlink/, so thatindex.php,config.php, thesrc/folder and.htaccessare all present. - Open it in a browser at
https://yourdomain.com/backlink/. - Sign in. The defaults are
admin/adminA; change them, see Configuration. - Enter your site URL, paste candidate domains (one per line, optionally
domain,DR,spam) or upload a.txtor.csv, and click Analyze & rank. - Review the Prospects and Google Disavow tabs, then export as PDF, Excel or CSV.
git clone https://github.com/morpheusadam/BacklinkVoid.git
cd backlinkvoidchecker/terminal-version# Rank a list for your site (HTML report + CSV)
python backlink_evaluator.py --input backlinks.txt --target-url "https://your-site.com"
# Custom outputs, extra niche keywords, more workers
python backlink_evaluator.py -i backlinks.txt -o report.html --csv-out out.csv --niche "fintech, saas" --workers 16
# Skip live fetching (offline, name and TLD scoring only)
python backlink_evaluator.py -i backlinks.txt --no-fetchThe Excel and Google Disavow exports and the weekly Telegram monitor are currently web-app features; porting them to the CLI is planned. See terminal-version/README.md for the full list of CLI flags.
Every domain goes through the same pipeline. Live mode fetches and profiles the page; offline mode scores from the name and TLD only. Weights are normalised over whatever signals are available. Start outreach at the top of the list and prioritise rows tagged "guest post".
| Factor | Weight | Meaning |
|---|---|---|
| Relevance | 30 | Topic match to your site |
| Authority | 25 | Domain strength (real DR if provided, otherwise a content proxy) |
| Domain health | 13 | Live, indexable, real content, not parked |
| Link-friendliness | 12 | Openly accepts guest posts, so realistic to win |
| TLD / language / geo | 10 | Reputable TLD, language fit |
| Spam safety | 10 | Not a PBN or toxic neighbourhood |
Authority is approximate in live mode. Without a paid API the tool infers authority from content, HTTPS and indexing. For an accurate ranking, feed a CSV with a dr or domain-rating column from Ahrefs, Moz or Semrush; it is used automatically.
Settings live in config.php in the project root.
| Setting | Purpose | Default |
|---|---|---|
AUTH_USER / AUTH_PASS |
Login credentials. Set both to '' to disable |
admin / adminA |
ACCESS_PASSWORD |
Optional extra password on POST actions | '' |
NOTIF_SECRET_KEY |
At-rest encryption key. Change to a long random string | placeholder |
NOTIF_CRON_TOKEN |
Secret in the weekly cron URL. Change to a random string | placeholder |
NOTIF_INTERVAL |
Weekly-check throttle | 7 days |
NOTIF_DURATION |
Monitor lifetime | 1 year |
To keep real secrets out of git, create a config.local.php next to config.php with the same define() lines and your real values. It is loaded first and is git-ignored. Change admin / adminA and NOTIF_SECRET_KEY before going live.
Weekly Telegram monitor, via cron:
0 9 * * 1 curl -fsS "https://YOURDOMAIN/backlink/index.php?cron=run&token=PUT-YOUR-CRON-TOKEN-HERE" >/dev/null 2>&1The endpoint throttles itself to once every 7 days and only alerts about newly spam or toxic domains.
.
├── index.php # Thin bootstrap (web root entry point)
├── config.php # Your editable settings / secrets
├── .htaccess # noindex headers + blocks config / src from the web
├── robots.txt
├── src/ # Object-oriented application (one class per file)
│ ├── Config.php # algorithmic defaults (weights, patterns, TLD tables)
│ ├── Support.php # helpers: escaping, URL / domain parsing, data dir
│ ├── Engine.php # the scoring pipeline (fetch, profile, score)
│ ├── Security.php # AES encryption, login cookie, per-browser cache
│ ├── Monitor.php # Backlink Notif: state store + Telegram + scan
│ ├── View.php # all HTML (report, form, notif page, login)
│ └── Router.php # request dispatch + the Notif controller
└── terminal-version/ # Python CLI edition (see its own README)
└── backlink_evaluator.py
Open an issue or submit a pull request with new scoring signals, export formats, or CLI feature parity.
Distributed under the MIT License. See LICENSE for details. Disavowing healthy links can hurt your rankings, so review the generated disavow file before uploading it.
Morpheus Adam. Web developer, PHP, Laravel, Go.