Tester automatiquement la validité de vos liens d’affiliation

Si vous gérez un site monétisé par de l’affiliation, vous savez que les liens que proposent les brokers ou les plateformes d’affiliation ne sont pas valides éternellement pour 2 principales raisons :

  • Le site affilié change d’url ou ferme
  • Le programme d’affiliation sur la plateforme tierce est fermé ou mis en pause

Si vous n’avez que deux ou trois programmes d’affiliation ça peut se gérer manuellement, mais si vous avez comme c’est mon cas sur Sites2rencontre.fr 630 programmes avec 95 régies, ça peut vite devenir un enfer de vérifier chaque lien quotidiennement.

Au final vous risquez un jour ou l’autre de vous rendre compte que l’un de vos produits en affiliation n’est plus correctement redirigé … plusieurs mois après l’incident.

La solution que je vous propose n’est pas parfaite mais elle vous permettra de débroussailler le travail automatiquement.

Principe du script de test

Le principe du script est le suivant :

  • nous allons dans un premier temps tenter de récupérer la cible de notre url affilié pour la comparer à l’url classique du site
  • si les 2 url sont différentes c’est sans doute que le lien affilié n’est plus valide
  • dans ce cas nous enverrons un mail à l’administrateur pour le tenir informé

Pour ne pas surcharger le serveur nous ne déclencherons ce script que lors de l’affichage d’une page contenant un lien affilié.

Bien évidemment vous êtes libre de stocker ces informations en base de donnée ou sous forme de fichier plat afin de créer un tableau de bord, mais je ne suis pas allé jusque là …

Stockage des informations

Partons du principe que vous stockez les informations suivantes sur votre site :

  • direct_url : l’adresse réelle du site
  • affilate_url : votre lien d’affiliation

Nous allons créer 2 champs complémentaires pour stocker les résultats de nos tests à venir :

  • test_redirect_validity : un drapeau permettant de savoir si le dernier test a été concluant

Comparer les racines des domaines

Afin d’éviter des sanctions de Google (qui lutte contre l’affiliation) certaines régies qui font des redirections 301 ou 302 sont allées un cran plus loin en proposant une page de vente affilié avec un nom de domaine différent de celui du site affilié.

Concrètement ça se traduit ainsi :

  • direct_url = nom-de-domaine.com
  • affilate_url = nomdedomaine.com ou nom-de-domaine.co

Nous allons donc comparer par la suite les racines des 2 liens, soit ici nom-de-domaine

function get_root_name($domain){
$host_names = explode(".", $domain);
$bottom_host_name = $host_names[count($host_names)-2];
return $bottom_host_name;
}

Concrêtement : get_root_name(www1.nom-de-domaine.com) renverra nom-de-domaine

Retrouver le lien cible

Supposons que le site auquel vous êtes affilié soit direct_url = siteaffilie.fr et que la régie d’affiliation par laquelle vous passez soit affilate_urlregie.fr

Vos liens affiliés ont la plupart du temps 2 formes possibles :

  • affilate_urlsiteaffilie.fr?aff=votre_ID_affilie
  • affilate_urlregie.fr?aff=votre_ID_affilie&site=siteaffilie

Lorsque le lien est de la forme regie.fr?quelque_chose 3 mécanismes différents sont généralement utilisés pour rediriger l’utilisateur vers le site affilié :

  1. Une redirection 301 ou 302
  2. Une redirection javascript
  3. Une redirection via un contrôle coté serveur sur le site de la régie

A moins d’émuler un navigateur avec Javascript il n’est pas possible simplement de tester le 2ème type de redirection, et pour le 3ème type j’avoue ne pas savoir non plus comment faire.

Vos idées sur la question son les bienvenues dans les commentaires

Nous allons donc tester uniquement le 1er type de redirection.

function get_redirected_domain($url){
	$furl = false;

	// on récupère les headers
	$headers = get_headers($url);

	// on teste s'il s'agit d'une redirection 301 ou 302
	if(preg_match('/^HTTP\/\d\.\d\s+(301|302)/',$headers[0])) {
		foreach($headers as $value){
			if(substr(strtolower($value), 0, 9) == "location:") {
				$furl = trim(substr($value, 9, strlen($value)));
			}
		}
	}

	// Si on redirige sur le même domaine
    if (!strpos($furl,"://",0)) {
		return (get_root_name($url));

	// Sinon
	} else {
		$furl = ($furl) ? $furl : $url;
		$parsed_url = parse_url($furl);
		$domain=$parsed_url['host'];
		return (get_root_name($domain));
	}
}

Tester les liens et envoyer un mail en cas d’erreur

Passons maintenant à la fonction que nous intégrerons sur les pages contenant nos liens affiliés.
Mes sites étant sous WordPress vous devrez adapter le code si vous n’utilisez pas ce CMS.

function test_redirect_validity($affilate_url,$direct_url) {
	$ID = get_the_ID();
	// On rappatrie les paramètres par défaut
	if (!$affilate_url) { $affilate_url = get_post_meta($ID, 'affilate_url', true); }
	if (!$direct_url) { $direct_url = get_post_meta($ID, 'direct_url', true); }

	// On recupere la date du jour
	$today = date('Y-m-d');

	// On recupere la date du dernier test
	$test_redirect_date = get_post_meta($ID, 'test_redirect_date', true);
	if (!$test_redirect_date) { $test_redirect_date = "1970-01-01";}

	// On calcule depuis combien de jour a ete fait le dernier test
	$update_delay = ( strtotime($today) - strtotime($test_redirect_date) )/86400;

	// Si le test a ete fait il y a plus de 5 jours on fait un nouveau test
	if ($update_delay > 5) {

		// On met a jour la date de test
		update_post_meta($ID, 'test_redirect_date', date ('Y-m-d'));

		// On recupere la racine de l'url non affiliee
		$direct_url_domain = parse_url($direct_url);
		$direct_url_domain = $direct_url_domain["host"];
		$direct_url_domain = get_root_name($direct_url_domain);

		// On recupere la cible de l'url affiliee
		$affiliate_url_domain = get_redirected_domain($affilate_url);

		// On fait 3 tests de comparaison avec et sans les tirets
		if (
			($direct_url_domain != $affiliate_url_domain)
			&& 
			($direct_url_domain != str_replace ("-","",$affiliate_url_domain))
			&& 
			(str_replace("-","",$direct_url_domain) != $affiliate_url_domain)
		)
		{
			update_post_meta($ID, 'test_redirect_validity', 0);

			// On envoie le mail d'erreur
			$to = get_option('admin_email');
			$subject = "[".get_bloginfo('name')."] Lien affilie a controler : ".get_the_title($ID);
			$message = "\r\nLien affilie a controler pour ".get_the_title($ID)." : ".get_permalink($ID);
			$message .= "\r\nModifier le lien : ".get_site_url()."/wp-admin/post.php?post=".$ID."&action=edit";
			$message .= "\r\n";
			wp_mail($to, $subject, $message);

		} else {
			update_post_meta($ID, 'test_redirect_validity', 1);
		}
	}
}

Il ne vous reste plus qu’à insérer la fonction test_redirect_validity() avec les bons paramètres dans votre template single.php ou à rajouter dans function.php :

add_action('the_content','test_redirect_validity');

Et voilà : dès qu’un test ne fonctionnera pas vous recevrez un mail de rappel.

Le système n’est certes pas parfait mais il m’a déjà fait gagner du temps et surtout de l’argent. Si vous avez des idées pour améliorer ce mécanisme n’hésitez pas à régir dans les commentaires.
Pensez bien aussi à mettre en place des décrochages pour désactiver les mails sur les redirections non détectées.

Tester automatiquement la validité de vos liens d’affiliation

Vous avez un projet ?

Parlons-en ensemble

Nous contacter

Partager cet article

Noter cet article

1/52/53/54/55/5
Fabien Elharrar - 309 articles
Consultant en acquisition d'audience, monétisation web et growth hacking.
159 solutions pour monetiser votre blog
RECEVOIR LES MEILLEURS ARTICLES
JE M'ABONNE
Lire les articles précédents :
Adblock Plus bloque de nouveau les publicités sur Facebook

Il y a deux jours, le géant Facebook a trouvé une solution pour afficher des publicités même si l'utilisateur a recours à un...

Fermer