Sélectionner une page

Supprimer automatiquement noreferrer aux liens externes

code, WordPress

Depuis WordPress 5.1, le CMS ajoute automatiquement les attributs rel="noopener noreferrer" à tous les liens ouverts dans un nouvel onglet (target="_blank"). Cette mesure renforce la sécurité, mais peut poser un problème pour les liens d’affiliation et certaines intégrations marketing.

Dans cet article, vous allez apprendre à supprimer uniquement noreferrer tout en conservant noopener, la partie réellement utile pour la sécurité.


Pourquoi WordPress ajoute rel="noopener noreferrer"

Lorsqu’un lien s’ouvre dans un nouvel onglet, la page cible peut, en théorie, utiliser window.opener pour modifier ou rediriger la page d’origine.
C’est ce qu’on appelle une attaque par tab-napping.

Pour éviter cela, WordPress ajoute automatiquement deux attributs :

  • noopener : empêche la page cible d’accéder à window.opener.
  • noreferrer : masque l’URL de provenance (le referrer), empêchant le site visité de savoir d’où vient le clic.

Si le premier est essentiel, le second peut être gênant, notamment dans le cas de liens d’affiliation ou de campagnes de tracking.


Quand noreferrer devient problématique

Certains systèmes d’affiliation, régies publicitaires ou outils d’analyse de trafic utilisent le referrer pour identifier la provenance des visiteurs. Or, l’attribut noreferrer bloque cette information.

Résultat :

  • Les clics ne sont plus correctement suivis.
  • Les conversions peuvent ne pas être attribuées à votre site.
  • Vos statistiques de provenance deviennent incomplètes.

Si vous gérez des partenariats ou des liens sponsorisés, il est donc préférable de supprimer noreferrer tout en gardant noopener pour la sécurité.


Supprimer noreferrer via un simple snippet PHP

WordPress fournit un filtre natif, wp_targeted_link_rel, qui permet de modifier les attributs ajoutés aux liens.
Voici comment l’utiliser pour supprimer uniquement noreferrer.

Code à copier dans votre thème enfant

Ajoutez ce snippet dans le fichier functions.php de votre thème enfant

/**
 * Supprime "noreferrer" des liens WordPress ouverts dans un nouvel onglet.
 * Conserve "noopener" pour la sécurité.
 */

add_filter('wp_targeted_link_rel', function ($rel, $link) {
    // Retire uniquement "noreferrer" de la chaîne
    if (strpos($rel, 'noreferrer') !== false) {
        $rel = str_replace('noreferrer', '', $rel);
    }

    // Nettoie les espaces éventuels
    $rel = trim(preg_replace('/\s+/', ' ', $rel));

    // Si la chaîne est vide, retourne null pour éviter rel=""
    return $rel ?: null;
}, 10, 2);

Exemple avant et après l’installation du snippet

Avant (comportement par défaut de WordPress) :

<a href="https://exemple.com" target="_blank" rel="noopener noreferrer">
    Visiter le site partenaire
</a>

Après (avec le filtre actif) :

<a href="https://exemple.com" target="_blank" rel="noopener">
    Visiter le site partenaire
</a>

Le lien reste sécurisé grâce à noopener, mais transmet à nouveau le referrer au site cible.
Vos liens d’affiliation et outils de suivi fonctionneront normalement.


Explications du fonctionnement du filtre

  • wp_targeted_link_rel est exécuté à chaque génération de lien avec target="_blank".
  • WordPress lui passe deux paramètres :
    • $rel : la chaîne d’attributs rel actuelle,
    • $link : le lien complet.
  • En interceptant ce filtre, le code supprime le mot noreferrer et nettoie la chaîne restante.
  • Si rien ne reste, WordPress n’ajoute aucun attribut rel="" vide.

Bonnes pratiques et précautions

  1. Ne retirez jamais noopener : c’est lui qui protège contre les attaques par tab-napping.
  2. Testez vos liens externes après avoir ajouté le code pour vérifier leur comportement.
  3. Videz votre cache si vous utilisez un plugin de mise en cache (LiteSpeed, WP Rocket, etc.), afin que les pages soient régénérées avec le nouveau code.
  4. Mettez le code dans le thème enfant, jamais dans le thème parent, pour éviter de le perdre lors d’une mise à jour.

Résumé

  • WordPress ajoute automatiquement noreferrer sur les liens ouverts dans un nouvel onglet.
  • Cet attribut empêche le suivi du referrer, ce qui gêne les liens d’affiliation.
  • En utilisant le filtre wp_targeted_link_rel, il est possible de supprimer uniquement noreferrer tout en gardant noopener.
  • Le snippet présenté ici est léger, sûr et compatible avec tous les constructeurs de pages.
Vous avez des questions à propos de cet article ? Besoin d’aide sur un autre sujet ? Contactez-moi, je pratique des prix vraiment compétitifs et je réponds généralement rapidement