Définition
Le fichier de désaveu (disavow file) est un document texte formaté que les webmasters peuvent soumettre à Google via la Search Console pour demander au moteur de recherche d’ignorer des liens entrants spécifiques. Cet outil est utilisé en dernier recours pour se protéger contre des backlinks toxiques qui pourraient nuire au référencement, notamment après une pénalité manuelle ou algorithmique.
Format et syntaxe
Structure du fichier
# Fichier désaveu exemple - monsite.com
# Généré le 2024-12-01
# Contact: seo@monsite.com
# Liens spam individuels à désavouer
http://spam-site1.com/page-with-bad-link.html
http://casino-spam.net/links/monsite
https://adult-content.com/directory/page-123
# Domaine entier spam (réseau de liens)
domain:linkfarm-network.com
# Site piraté qui linke massivement
domain:hacked-wordpress.org
# Commentaires peuvent détailler les raisons
# PBN identifié - Juillet 2024
domain:private-blog-network1.net
domain:private-blog-network2.net
domain:private-blog-network3.net
# Negative SEO attack - Août 2024
domain:cheap-viagra-pills.com
domain:payday-loans-fast.net
Règles de formatage
# Validation format fichier désaveu
def validate_disavow_file(file_content):
"""
Vérifie conformité fichier désaveu
"""
errors = []
warnings = []
valid_entries = []
lines = file_content.strip().split('\n')
for line_num, line in enumerate(lines, 1):
line = line.strip()
# Ignorer lignes vides
if not line:
continue
# Commentaires autorisés
if line.startswith('#'):
continue
# Validation format domaine
if line.startswith('domain:'):
domain = line[7:]
if not is_valid_domain(domain):
errors.append(f"Ligne {line_num}: Domaine invalide '{domain}'")
else:
valid_entries.append(line)
# Validation format URL
else:
if not line.startswith(('http://', 'https://')):
warnings.append(f"Ligne {line_num}: URL sans protocole '{line}'")
if not is_valid_url(line):
errors.append(f"Ligne {line_num}: URL invalide '{line}'")
else:
valid_entries.append(line)
return {
'valid': len(errors) == 0,
'entries': valid_entries,
'errors': errors,
'warnings': warnings,
'stats': {
'total_lines': len(lines),
'domains': len([l for l in valid_entries if l.startswith('domain:')]),
'urls': len([l for l in valid_entries if not l.startswith('domain:')])
}
}
Quand utiliser le désaveu
Critères de décision
// Analyse nécessité désaveu
const analyzeDisavowNeed = (backlinks) => {
const toxicityAnalysis = {
high_risk_indicators: 0,
medium_risk_indicators: 0,
manual_action: false,
recommendation: null
};
// Indicateurs haut risque
const highRiskPatterns = [
/viagra|cialis|casino|poker|payday.?loan/i,
/adult|porn|xxx|escort/i,
/cheap.?pills|pharmacy/i,
/hack|crack|keygen/i
];
// Analyse profil liens
backlinks.forEach(link => {
// Spam évident
if (highRiskPatterns.some(pattern => pattern.test(link.url))) {
toxicityAnalysis.high_risk_indicators++;
}
// Métriques suspectes
if (link.domain_authority < 10 && link.spam_score > 50) {
toxicityAnalysis.medium_risk_indicators++;
}
// Ancres sur-optimisées
if (link.anchor_text && isOverOptimized(link.anchor_text)) {
toxicityAnalysis.medium_risk_indicators++;
}
});
// Recommandations
const totalLinks = backlinks.length;
const toxicPercentage = (toxicityAnalysis.high_risk_indicators / totalLinks) * 100;
if (toxicPercentage > 20) {
toxicityAnalysis.recommendation = 'URGENT: Désaveu recommandé';
} else if (toxicPercentage > 10) {
toxicityAnalysis.recommendation = 'Désaveu à considérer';
} else if (toxicityAnalysis.manual_action) {
toxicityAnalysis.recommendation = 'Désaveu requis (action manuelle)';
} else {
toxicityAnalysis.recommendation = 'Désaveu non nécessaire';
}
return toxicityAnalysis;
};
Analyse préalable
# Audit liens avant désaveu
def pre_disavow_audit(domain):
"""
Analyse complète avant création fichier désaveu
"""
audit_steps = {
'1_export_backlinks': {
'tools': ['Google Search Console', 'Ahrefs', 'Semrush', 'Majestic'],
'data': 'Tous les backlinks du domaine'
},
'2_identify_toxic': {
'spam_score': 'Score spam > 60%',
'domain_rating': 'DR/DA < 20',
'content_quality': 'Sites adulte/casino/spam',
'link_patterns': 'Sitewide, footer, commentaires'
},
'3_contact_attempts': {
'action': 'Contacter webmasters',
'template': 'Demande suppression polie',
'tracking': 'Log tentatives contact',
'wait_time': '2-4 semaines'
},
'4_document_evidence': {
'screenshots': 'Preuves liens toxiques',
'communications': 'Emails envoyés/reçus',
'timeline': 'Chronologie actions',
'impact_data': 'Chute trafic/rankings'
}
}
# Métriques pour décision
toxic_links = []
for link in get_all_backlinks(domain):
toxicity_score = calculate_toxicity(link)
if toxicity_score > 0.7: # 70% probabilité toxique
toxic_links.append({
'url': link.url,
'domain': link.domain,
'toxicity': toxicity_score,
'reason': identify_spam_reason(link),
'contacted': check_contact_attempt(link.domain)
})
return {
'total_backlinks': len(get_all_backlinks(domain)),
'toxic_identified': len(toxic_links),
'percentage_toxic': len(toxic_links) / len(get_all_backlinks(domain)) * 100,
'toxic_links': toxic_links,
'recommendation': generate_recommendation(toxic_links)
}
Processus de soumission
Via Google Search Console
# Processus soumission automatisé
def submit_disavow_file(file_path, property_url):
"""
Guide soumission fichier désaveu
"""
process = {
'step_1': {
'action': 'Préparer fichier',
'format': 'UTF-8 ou ASCII',
'extension': '.txt',
'size_limit': '100,000 URLs et 2MB',
'validation': validate_disavow_file(file_path)
},
'step_2': {
'url': 'https://search.google.com/search-console/disavow-links',
'requirement': 'Propriétaire vérifié Search Console',
'selection': 'Choisir propriété concernée'
},
'step_3': {
'upload': 'Téléverser fichier .txt',
'confirmation': 'Valider remplacement ancien fichier',
'warning': 'Action irréversible immédiate'
},
'step_4': {
'processing': '2-4 semaines pour prise en compte',
'monitoring': 'Surveiller Search Console',
'impact': 'Pas de notification de Google'
}
}
# Backup avant soumission
backup_file = f"disavow_backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
create_backup(file_path, backup_file)
return process
Gestion post-soumission
// Monitoring après désaveu
const postDisavowMonitoring = {
immediate_actions: {
'document_submission': {
date: new Date(),
file_snapshot: 'disavow_v1.txt',
total_entries: 156,
domains_disavowed: 23,
urls_disavowed: 133
},
'setup_tracking': {
rankings: 'Daily rank tracking top keywords',
traffic: 'Monitor organic traffic trends',
new_links: 'Alert for new toxic links',
penalties: 'Check manual actions weekly'
}
},
timeline_expectations: {
week_1_2: 'Aucun changement attendu',
week_3_4: 'Début traitement par Google',
week_5_8: 'Premiers impacts possibles',
week_9_12: 'Stabilisation nouveaux rankings',
month_3_plus: 'Évaluation résultats complets'
},
success_metrics: {
'recovery_signs': [
'Amélioration rankings progressifs',
'Augmentation trafic organique',
'Levée action manuelle',
'Stabilité algorithme'
],
'warning_signs': [
'Chute continue rankings',
'Nouveaux liens toxiques',
'Pas amélioration après 3 mois',
'Nouvelles pénalités'
]
}
};
Risques et précautions
Erreurs à éviter
# Erreurs courantes désaveu
common_disavow_mistakes = {
'over_disavowing': {
'risk': 'Désavouer bons liens par erreur',
'consequence': 'Perte autorité légitime',
'prevention': 'Analyse minutieuse chaque lien',
'example': 'Désavouer domaine entier au lieu URL spécifique'
},
'formatting_errors': {
'risk': 'Fichier mal formaté ignoré',
'common_mistakes': [
'Espaces dans "domain:"',
'URLs relatives au lieu absolues',
'Caractères spéciaux non encodés',
'Fichier trop volumineux'
]
},
'timing_issues': {
'too_early': 'Désavouer avant tentative contact',
'too_late': 'Attendre après pénalité sévère',
'optimal': 'Après 2-3 tentatives contact infructueuses'
},
'incomplete_analysis': {
'mistake': 'Se fier à un seul outil',
'solution': 'Croiser données plusieurs sources',
'tools': ['GSC + Ahrefs + Semrush + Analyse manuelle']
}
}
Alternatives au désaveu
// Stratégies avant désaveu
const alternativesToDisavow = {
link_removal: {
priority: 1,
method: 'Contact direct webmasters',
success_rate: '30-40%',
template: `
Bonjour,
Je remarque un lien depuis votre site [URL] vers
notre site [Domain]. Pourriez-vous le retirer?
Merci d'avance,
[Signature]
`
},
link_building_positive: {
priority: 2,
method: 'Diluer mauvais liens avec bons',
strategy: 'Acquérir liens haute qualité',
ratio_target: '10:1 bons/mauvais liens'
},
content_improvement: {
priority: 3,
method: 'Renforcer signaux qualité',
actions: [
'Améliorer contenu existant',
'Créer contenu expert',
'Optimiser UX/Core Web Vitals'
]
},
wait_and_monitor: {
when: 'Moins de 5% liens toxiques',
duration: '3-6 mois',
monitoring: 'Rankings et trafic',
decision: 'Agir si dégradation'
}
};
Le fichier de désaveu reste un outil puissant mais dangereux qui doit être utilisé avec précaution, uniquement après avoir épuisé les autres options et effectué une analyse approfondie des liens toxiques.