web-dev-qa-db-ja.com

301リダイレクトがgooglebotに表示されない

wordpressサイトで機能を作成しました。

機能の目的は次のとおりです。

1)投稿が見つからない場合は、投稿のアーカイブにリダイレクトします。

かなり簡単なはずですよね?

まあ-あらゆる種類のツールによると、そうではありません。

この関数を作成することから始めます。

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'); 

今..私がテストのために持っているすべてのツールは、それが基本的に素晴らしく動作することを示唆します。ToolbotからPlayStation3まですべてがリダイレクトをうまく理解します。

しかし、Googlebot(およびその他の検索ボット)はそれを受け入れることを拒否し、依然として404ページが表示されます。

pre_get_postフックを使用する必要があります-投稿が存在するかどうかを確認する必要があるので、正しいですか?

グーグルにリダイレクトを強制する方法はありますか?

プロセスの後半にリダイレクトしていますか?

Googlebotsの結果に関するドキュメントは、あまりよく文書化されていません。

私はテストしました: http://www.redirect-checker.org/index.php とScreamingFrogプログラムを使用して

私はここでロープにいます-単にGoogleがリダイレクトに従わない理由を理解することはできません。

1
Stender

ヘッダーを呼び出した後、exitまたはdieにする必要があります。そうしないと、スクリプトは通常どおり続行され、結果が表示される理由が説明されます。

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