Fermer

mars 12, 2024

WordPress : rediriger dynamiquement une page AMP vers un site non AMP lorsqu’elle n’est pas prise en charge

WordPress : rediriger dynamiquement une page AMP vers un site non AMP lorsqu’elle n’est pas prise en charge


J’ai AMP chargé sur mon site et j’ai vu un joli flux de visites AMP de Google. Bien que je ne sois pas un grand fan d’AMP, il semble attirer beaucoup d’attention de la part des moteurs de recherche. Mon thème prend en charge AMP dans les publications (ou les types de publication personnalisés qui sont un type de publication), mais ne prend pas en charge AMP sur un modèle de page.

Comme Google ne s’en rend pas compte, ils signalent des erreurs avec le chemin AMP sur ces pages dans Console de recherche Google. Et… à juste titre, les pages produisent un 500 erreur. J’ai découvert cela en publiant une page avec mon le plus populaire publications mensuelles. Google a essayé d’indexer une version AMP à https://martech.zone/popular/?amp=1entraînant une erreur de script et une erreur.

Plutôt que d’ignorer l’erreur, j’ai ajouté du code à mon thème enfant functions.php page qui redirige le visiteur s’il demande une page AMP et que le modèle est un modèle de page :

// If there's a page URL with amp, redirect it to the parent page
add_action('template_redirect', 'redirect_amp_to_non_amp');
function redirect_amp_to_non_amp() {
    // Check if this is a page and if it's an AMP request
    if (is_page() && function_exists('amp_is_request') && amp_is_request()) {
        // Redirect to the non-AMP version of the page
        global $wp;
        $current_url = home_url(add_query_arg(array(), $wp->request));
        wp_redirect($current_url, 301);
        exit;
    }
}

Répartition du code :

  1. add_action(‘template_redirect’, ‘redirect_amp_to_non_amp’);
    • Cette ligne accroche une fonction personnalisée redirect_amp_to_non_amp dans WordPress template_redirect action. Le template_redirect hook est exécuté juste avant que WordPress ne détermine quel modèle ou fichier doit gérer la requête. C’est une étape appropriée pour effectuer des redirections.
  2. fonction redirect_amp_to_non_amp() {…}
    • Ici, une fonction nommée redirect_amp_to_non_amp est défini. Cette fonction contient la logique permettant de vérifier si la requête en cours concerne une page AMP et si elle doit être redirigée.
  3. if (is_page() && function_exists(‘amp_is_request’) && amp_is_request()) {…}
    • Au sein de la fonction, cette instruction conditionnelle vérifie trois choses :
      • is_page(): Détermine si la demande actuelle concerne une page WordPress (par opposition à une publication ou un autre type de publication).
      • function_exists('amp_is_request'): Vérifie si la fonction amp_is_request existe. Cette fonction fait partie du plugin AMP et vérifie si la requête actuelle concerne une page AMP.
      • amp_is_request(): Si la fonction existe, elle est ensuite appelée pour déterminer si la requête actuelle concerne réellement une page AMP.
    • La condition entière sera vraie si la requête concerne une page, le amp_is_request La fonction est disponible et la demande actuelle concerne une version AMP d’une page.
  4. global $wp ;
    • Cette ligne rend la variable globale $wp disponible dans la fonction. Le $wp la variable est une instance de WP classe et contient les propriétés liées à la requête en cours, y compris la chaîne de requête.
  5. $current_url = home_url(add_query_arg(array(), $wp->request));
    • home_url(): Cette fonction WordPress récupère l’URL d’accueil du site.
    • add_query_arg(array(), $wp->request): ajoute un argument de requête à l’URL. Dans ce cas, un tableau vide est transmis, ce qui signifie qu’aucun argument de requête supplémentaire n’est ajouté, mais il reconstruit effectivement l’URI de la requête actuelle sans aucun paramètre de requête (comme ?amp=1).
    • Le résultat est l’URL actuelle sans aucun paramètre de requête lié à AMP.
  6. wp_redirect($current_url, 301);
    • Cette fonction redirige l’utilisateur vers la version non-AMP de la page (contenue dans $current_url) avec un 301 HTTP code d’état, indiquant une redirection permanente. Ceci est bénéfique pour maintenir la valeur du référencement en garantissant que les moteurs de recherche mettent à jour leur index vers l’URL non AMP.
  7. sortie;
    • Cette commande est utilisée pour terminer l’exécution du script immédiatement après le lancement de la redirection. Cela empêche WordPress de continuer à charger la page AMP d’origine ou d’exécuter du code supplémentaire qui pourrait interférer avec la redirection.

Rediriger le modèle de page personnalisé vers un modèle non AMP

Vous pouvez également modifier le code pour l’appliquer à un modèle de page ou à un ID de page spécifique.

Pour un modèle de page spécifique :

Si vous souhaitez que la redirection s’applique uniquement à un modèle de page spécifique, vous utiliserez le is_page_template() fonctionner dans votre contrôle conditionnel. Par exemple, si votre modèle s’appelle custom-template.phple code ressemblerait à ceci :

function redirect_amp_to_non_amp() {
    // Check if this is a specific template, the function exists, and it's an AMP request
    if (is_page_template('custom-template.php') && function_exists('amp_is_request') && amp_is_request()) {
        global $wp;
        $current_url = home_url(add_query_arg(array(), $wp->request));
        wp_redirect($current_url, 301);
        exit;
    }
}
add_action('template_redirect', 'redirect_amp_to_non_amp');

Dans ce code, is_page_template('custom-template.php') vérifie si la page actuelle utilise le custom-template.php modèle.

Pour un ID de page spécifique :

Si vous souhaitez que la redirection s’applique uniquement à une page avec un identifiant spécifique, vous utiliserez le is_page() fonctionner avec l’ID spécifique comme paramètre. Par exemple, si vous souhaitez appliquer ceci à une page avec l’ID 42, le code ressemblerait à ceci :

function redirect_amp_to_non_amp() {
    // Check if this is a specific page ID, the function exists, and it's an AMP request
    if (is_page(42) && function_exists('amp_is_request') && amp_is_request()) {
        global $wp;
        $current_url = home_url(add_query_arg(array(), $wp->request));
        wp_redirect($current_url, 301);
        exit;
    }
}
add_action('template_redirect', 'redirect_amp_to_non_amp');

En adaptant l’instruction conditionnelle au sein de la fonction, vous pouvez contrôler précisément quelles pages ou modèles de page doivent déclencher la redirection AMP vers non-AMP.




Source link