web-dev-qa-db-ja.com

特定の投稿タイプの404エラーすべてを別のURLにリダイレクトする方法

仕事のリストを含むカスタム投稿タイプがあります。ジョブは頻繁に追加および削除されます。我々の分析によると、クロールエラーの多くは、リストに含まれていないジョブの詳細ページに関するものです。

私が考え出した解決策は、CPTのスラッグ内に存在しないURLへのすべての訪問を求人一覧の概要にリダイレクトすることです。これを自動化したいと思います。

これについてはどうしたらいいでしょうか。私はこれを非常に早い段階で行い、できるだけ多くの不要な呼び出しをスキップする解決策を探しています。 (つまり、header.phpでこれを行うよりも前に、理想的にはアクションとして)

例:

  • mydomain.com/jobs/existingjob/は仕事の詳細ページを配信します
  • mydomain.com/jobs/nojobhere/は存在せず404をスローしますが、代わりにmydomain.com/jobs/にリダイレクトされます。
2
lastfuture

template_redirectは、404エラーがスローされていることをまだ検出できながらも、あなたができるWordPressのアクションチェーンをはるかに超えているように見えます。このアクションは、テンプレートファイルがロードされる前にトリガーされるため、不要なリソースをロードする前に実行されます。

これを/wp-content/themes/yourtheme/functions.phpファイルに追加して、単一のジョブを表示しているときに発生する404個すべての動的リダイレクトを達成することができます。

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect()
{
    // check if is a 404 error, and it's on your jobs custom post type
    if( is_404() && is_singular('your-job-custom-post-type') )
    {
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
1
Ben HartLenn

あなたのサイトにその投稿タイプのページがない場合は、自分で質問する必要があります。本当にそのページを削除しますか。それとも私はちょうどそれを良くするべきですか?あなたがあなたが適切なHTTPヘッダを送ることを確認することを決心したならば:410コンテンツ削除ヘッダ。

404および410 HTTPヘッダー 404ヘッダーと410ヘッダーの違いは単純です。404は「コンテンツが見つかりません」を意味し、410は「コンテンツが削除された」ことを意味するため、より具体的です。 URLから410が返された場合、Googleはユーザーが意図的にそのURLを削除したことをはるかに確信しているため、そのURLをインデックスから削除する必要があります。これは、それがとても速くなるだろうことを意味します。

あなたはYoast SEO Premiumプラグインを使用することができます、このプラグインのリダイレクトモジュールは410のヘッダを処理することが可能です。

0
Aishan

Ben HartLennの答えについてコメントする担当者はいません。これは古い投稿ですが、将来のユーザーが無駄な時間を節約できるようにするため、is_singular( 'post_type')は404ページでは機能しません。 $ wp_query-> queried_objectも機能しません。

これはうまくいきます:

add_action( 'template_redirect', 'unlisted_jobs_redirect' );
function unlisted_jobs_redirect(){
    //check for 404
    if( is_404()){
        global $wp_query;
        //check that wp has figured out post_type from the request
        //and it's the type you're looking for
        if( isset($wp_query->query['post_type']) && $wp_query->query['post_type'] == 'your-job-custom-post-type' ){
        // then redirect to yourdomain.com/jobs/
        wp_redirect( home_url( '/jobs/' ) );
        exit();
    }
}
0
pilotfryer