Skip to main content
🎓 Claude Code Masterclass Learn AI-assisted development on Udemy — plus the companion book on Leanpub & Amazon. Start Learning
Google Disavow Links Guide: Remove Toxic Backlinks
DevOps

Google Disavow Links: How to Find and Remove

Step-by-step guide to using Google's Disavow Links tool. Find toxic backlinks with Ahrefs and Google Search Console, build a disavow file, and protect.

LB
Luca Berton
· 5 min read

Toxic backlinks can silently destroy your search rankings. Spammy sites linking to you, negative SEO attacks, or leftover links from old marketing campaigns — Google might associate your site with that low-quality neighborhood. The Disavow Links tool is your escape hatch.

I recently went through this process for my own site and want to share exactly what I did.

Google’s Disavow Links tool tells Google: “Please ignore these backlinks when evaluating my site.” It does not remove the links — it tells Google’s algorithm to discount them.

When to use it:

  • You have spammy or unnatural links pointing to your site
  • You received a manual action for “unnatural links to your site”
  • You see a pattern of low-quality domains linking to you
  • A negative SEO attack flooded your backlink profile

When NOT to use it:

  • Your backlink profile is clean — do not disavow everything “just in case”
  • The linking site is legitimate but low-authority — Google already ignores most low-quality links
  • You have not actually checked if the links are causing problems

Using Google Search Console

  1. Go to Google Search Console
  2. Select your property
  3. Navigate to Links in the left sidebar
  4. Click Top linking sites under “External links”
  5. Export the full list (CSV or Google Sheets)

GSC shows your top ~1,000 linking domains. For a complete picture, you need a third-party tool.

Using Ahrefs

Ahrefs gives you the most comprehensive backlink data:

  1. Go to Site Explorer and enter your domain
  2. Click Backlinks in the left menu
  3. Filter by Link type: dofollow (these matter most)
  4. Sort by Domain Rating (DR) ascending — the lowest-rated domains appear first
  5. Export the full list

Red flags to look for:

SignalWhat It Means
DR 0-5 with exact-match anchor textLikely spam or PBN
Hundreds of links from one domainSitewide footer/sidebar spam
Foreign language gambling/pharma sitesClassic negative SEO
Domains with no organic trafficProbably exists only for link schemes
Redirected domains linking to youOld expired domains repurposed as spam

Semrush has an automated toxic score:

  1. Go to Backlink Audit tool
  2. Enter your domain
  3. Set up the project
  4. Semrush assigns a Toxic Score (0-100) to each linking domain
  5. Review domains with Toxic Score above 60

Step 2: Investigate Before Disavowing

Do not blindly disavow everything with low DR. Check each suspicious domain:

For each suspicious linking domain:
1. Visit the actual page linking to you
2. Is the content relevant to your niche?
3. Is the site obviously spam (auto-generated, keyword-stuffed)?
4. Does the site have any real traffic? (Check in Ahrefs)
5. Is the anchor text manipulative (exact-match commercial keywords)?

Classify into three buckets:

  • Disavow — clearly spam, no legitimate reason to link to you
  • Request removal — legitimate site but link is from a guest post or paid campaign you want removed
  • Keep — low DR but genuine, relevant content

Request Removal First

Before disavowing, try to get the link removed:

Subject: Link Removal Request — [your domain]

Hi,

I noticed your site [their-domain.com] links to my website
[your-domain.com] from the page [URL].

Could you please remove this link? It appears to be
[spam/from an old campaign/unrelated to my content].

Thank you,
[Your name]

Keep records of removal requests. Google likes to see you tried manual removal before using the disavow tool.

Step 3: Build the Disavow File

The disavow file is a plain text file with a specific format:

# Disavow file for lucaberton.com
# Generated: 2026-04-04
# Last audit: Ahrefs + Google Search Console

# Spam domains - auto-generated content
domain:spamsite1.com
domain:spamsite2.net
domain:keyword-stuffed-blog.org

# Negative SEO - gambling/pharma links
domain:casino-links-xyz.com
domain:cheap-pharma-online.net

# PBN (Private Blog Network) domains
domain:seo-links-network-1.com
domain:seo-links-network-2.com

# Specific URLs (when only one page on a domain is problematic)
https://legitimate-site.com/spammy-guest-post-with-my-link
https://forum.example.com/thread/spam-thread-12345

Format Rules

  • One URL or domain per line
  • Use domain:example.com to disavow all links from a domain (recommended)
  • Use the full URL to disavow a specific page only
  • Lines starting with # are comments — use them to document your reasoning
  • File must be UTF-8 or 7-bit ASCII
  • Maximum file size: 2 MB
  • Maximum entries: 100,000

My Disavow File Structure

I organize mine by category with dates:

# =============================================
# Disavow file for lucaberton.com
# Last updated: 2026-04-04
# Total domains: 47
# =============================================

# --- Spam domains (identified 2026-01-15) ---
domain:spam-example-1.com
domain:spam-example-2.net

# --- Negative SEO (identified 2026-02-20) ---
domain:attack-domain-1.com

# --- Old campaign links (requested removal 2026-03-01) ---
# Removal request sent, no response after 30 days
domain:old-campaign-site.com

# --- Auto-generated / scraped content ---
domain:auto-blog-1.xyz
domain:auto-blog-2.xyz

Step 4: Submit the Disavow File

  1. Go to Google Disavow Links Tool
  2. Select your property (must be verified in GSC)
  3. Click Upload Disavow List
  4. Select your .txt file
  5. Confirm the submission

Important notes:

  • Processing takes 2-4 weeks as Google recrawls the disavowed links
  • You can update the file at any time — the new file replaces the old one completely
  • There is no “undo” button — to remove a disavow, upload a new file without those entries

Step 5: Monitor the Results

After submitting, track these metrics weekly:

In Google Search Console

  • Performance → watch for ranking changes on your target keywords
  • Links → check if the disavowed domains still appear (they will for a while)
  • Manual Actions → if you had one, check if it gets lifted

In Ahrefs

  • Backlink profile → toxic ratio should improve over time
  • Organic keywords → watch for ranking improvements
  • Domain Rating → may increase as toxic links are discounted

Expected Timeline

WeekWhat Happens
1-2Google processes the file, starts recrawling
3-4Disavowed links begin to be discounted
4-8Ranking changes become visible
8-12Full effect — reassess and update if needed

Common Mistakes

1. Disavowing Too Aggressively

Do not disavow every low-DR link. Many legitimate small sites, personal blogs, and niche forums have low DR but provide genuine, relevant links. Disavowing these hurts you.

2. Forgetting to Update

Your disavow file is not “set and forget.” New spam links appear constantly. Audit quarterly:

Quarterly backlink audit checklist:
[ ] Export new backlinks from Ahrefs (last 90 days)
[ ] Filter for DR 0-10 with suspicious patterns
[ ] Investigate each new suspicious domain
[ ] Update disavow file if needed
[ ] Re-upload to GSC

3. Using Disavow Instead of Fixing Real Problems

If you are getting spammy links because your site was hacked, fix the hack first. If you are getting links from a link-building campaign, stop the campaign. Disavow is cleanup, not prevention.

4. Not Documenting Your Decisions

Always add comments to your disavow file explaining why each domain is there. Future you (or your SEO colleague) will thank you.

Automated Monitoring Script

For sites with large backlink profiles, automate the detection:

#!/usr/bin/env python3
"""
Backlink health monitor.
Checks new backlinks against known spam patterns.
"""

import csv
import re

SPAM_PATTERNS = [
    r"casino|gambling|poker|slots",
    r"pharma|viagra|cialis|pills",
    r"payday|loan|credit-repair",
    r"seo-link|backlink-service|link-building",
    r"\d{6,}",  # domains with long number strings
]

def is_suspicious(domain: str, anchor: str) -> list[str]:
    """Check domain and anchor text against spam patterns."""
    flags = []
    for pattern in SPAM_PATTERNS:
        if re.search(pattern, domain, re.IGNORECASE):
            flags.append(f"Domain matches spam pattern: {pattern}")
        if re.search(pattern, anchor, re.IGNORECASE):
            flags.append(f"Anchor matches spam pattern: {pattern}")
    return flags

def audit_backlinks(csv_file: str) -> None:
    """Audit exported backlinks CSV from Ahrefs."""
    suspicious = []
    with open(csv_file) as f:
        reader = csv.DictReader(f)
        for row in reader:
            domain = row.get("Referring Domain", "")
            anchor = row.get("Anchor", "")
            dr = int(row.get("DR", 0))
            flags = is_suspicious(domain, anchor)
            if flags or dr < 5:
                suspicious.append({
                    "domain": domain,
                    "dr": dr,
                    "anchor": anchor,
                    "flags": flags,
                })

    print(f"Found {len(suspicious)} suspicious backlinks:\n")
    for item in suspicious:
        print(f"  {item['domain']} (DR {item['dr']})")
        for flag in item["flags"]:
            print(f"    ⚠ {flag}")
        print()

if __name__ == "__main__":
    import sys
    audit_backlinks(sys.argv[1])

Real Numbers from My Site

When I audited my own backlink profile:

  • Total referring domains: 202
  • Suspicious (DR under 5, spam patterns): 23
  • Actually disavowed after investigation: 12
  • Legitimate low-DR sites kept: 11

The key takeaway: most “suspicious” links turned out to be harmless small blogs or aggregator sites. Only disavow what is clearly toxic.

About the Author

I am Luca Berton, AI and Cloud Advisor. I manage SEO for multiple technical websites and have gone through the disavow process hands-on. Book a consultation to audit your backlink profile.

Free 30-min AI & Cloud consultation

Book Now