web-dev-qa-db-fra.com

301 redirection non vue par googlebot

J'ai créé une fonction sur un site wordpress.

Le but des fonctions est le suivant.

1) si le message n’est pas trouvé, redirigez-le vers l’archive du message.

Devrait être assez facile non?

Eh bien, selon toutes sortes d’outils, ce n’est pas le cas.

Je commence par créer cette fonction:

function check_database_for_existance() {
    if (is_main_query() && is_404() && !is_archive()){
        //Do all sorts of magic here to find the correct link.

        $redirectLink = "found-by-wp_magical-conditions";

        header("HTTP/1.1 301 Moved Permanently"); //Or temporery, doesn't matter - doesn't work
        header("Location: ".$redirectLink);
    }
}

add_action('pre_get_posts', 'check_database_for_existance'); 

Maintenant .. Tous les outils dont je dispose pour tester, suggèrent que cela fonctionne fondamentalement à merveille, tout, de Toolbot à PlayStation3, comprend très bien les redirections.

Mais Googlebot (et d'autres moteurs de recherche) refuse de l'accepter et continue de voir la page 404.

Je dois utiliser le crochet pre_get_post - car je dois savoir si les messages existent, non?

Existe-t-il un moyen de forcer Google à suivre la redirection?

Est-ce que je redirige trop tard dans le processus?

La documentation sur les résultats de Googlebots n'est pas très bien documentée, OMI.

J'ai testé sur: http://www.redirect-checker.org/index.php et en utilisant le programme ScreamingFrog

Je ne suis pas à la hauteur, je ne comprends tout simplement pas pourquoi Google ne suivra pas les redirections.

1
Stender

Après avoir appelé votre en-tête, vous devez utiliser exit ou die. Si vous ne le faites pas, le script continue comme d'habitude, ce qui explique probablement pourquoi vous voyez les résultats que vous êtes.

function check_database_for_existance() {
    if (is_main_query() && is_404() && !is_archive()){
        //Do all sorts of magic here to find the correct link.
        $redirectLink = "found-by-wp_magical-conditions";
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: ".$redirectLink);
        die;  // we are done here, nothing more to do
    }

}

1
Dave