web-dev-qa-db-ja.com

投稿、ページ、カテゴリ、画像のURLに301個のリダイレクトを作成しますか?

私はこれがここで尋ねるには多すぎるかもしれないので、もしそうなら、学ぶために別の場所を私に言ってください。

リダイレクトの支援

私はよく開発されていないサイトを片付け、サブディレクトリからwordpressを移行しています。私はリダイレクトと正規表現のロジスティクスに頭を包むことに何時間も費やしました。私はそれを把握していると思いますが、私はこれを正しく行っていることの確認とベストプラクティスに関するアドバイスをいただければ幸いです。ハウツーの例がある良いチュートリアルを誰かが知っているなら、私もそれを感謝します。

誰かがこのための 本当に 単純なプラグインを知っているなら、私は非常に感謝するでしょう。私はRedirectionsプラグインを見てきましたが、非常に混乱します(頭痛!)いずれにせよ、以下の私の考え(ソースの後に=>次にtarget)が、私がリダイレクトの指示とスクリーンショット、そして私が探した他のチュートリアルから集めたものです。私はそれらを直接.htaccessファイルに入れるか、またはリダイレクトまたは他のプラグインを使うかにかかわらず、それらが適用可能であると確信していますか?

だから、ここで私が達成しようとしていることと私はそれが行われる必要があると思う方法です:

  1. Wordpressをサブディレクトリからルートに移動するには:

    /wp /(.*)=> /$1
    
  2. 現在ルート内のサブディレクトリ内にあるすべてのページについて、削除したり、1つのトップレベルページにまとめたりします。

    /products-directory /(.*)=>/products-top-level-page 
     
    /about-directory /(.*)=>/about-top- level-page 
     
    /services-directory /(.*)=>/services-top-level-page 
    
  3. 特定のパターンに一致するトップレベルのページがたくさんある場合は、それらを特定のカテゴリに分類します。ファイル名はすべて同じ2つの単語で始まります:same-Word-variation-variation.htmlそしてそれらに既存のファイル名を残してもらいたい - 私のパーマリンクを `.html`で終わらせるように設定すれば、これはうまくいきます。 、 私は信じている:

    /same-Word(。*)=> /newcategory/$1
    

    パーマリンクが `.html`で終わっていない場合、どうやってルールを作成しますか? (私が見たと思う!は「not」の文字ですが、ここでの使い方がわかりません - それはそうです):

    /same-Word(。*)=> /newcategory/$1!\.html 
    
  4. そして、上記のように特定のページを識別してリダイレクトしたら、残りすべてを削除し(ゴミ)、ユーザーをホームページに送信します(またはランダムな投稿)。

    だから、ここで2つの質問:

    1. 「上記のように既にリダイレクトされたファイルを除くすべてのものに対して、これを実行する」というルールを作成する方法

    2. 今後作成する新しいページや投稿にそのルールが適用されないようにするにはどうすればよいですか。

    1つのアイデアは、削除すると404ページが見つからないということです。そのため、404ページ自体のルールを作成する必要がありますか。それが私がやりたいことですか?

    私が言ったように、このサイトは(クライアントが適切なアーキテクチャ、SEOなどに関係なく単に「ページを開く」ように指示するように指示されて)ひどく開発されています - それは事実上ランキングも外部リンクもありません。心配する必要はありませんが、SEOと適切な開発の観点から最善のアプローチを理解したいと思います。

  5. また、既存の画像などをwp-contentディレクトリに移動するか、それらを既存のサブディレクトリに置いておくべきですか。私の傾向は、本当に「クリーンな掃除」をすることです - 厄介なように思われるすべてを取り除きます、しかし、これがそれが価値があるより多くの仕事になるかどうか私はわかりません…

すべてのガイダンスを事前に感謝します。

5
CJN

こんにちは @ CJN:

あなたの最初の質問、WordPressディレクトリを移動することは他のものと異なって扱われます。

WordPressをサブディレクトリからルートに移動する:

/wp-config.phpに入り、defineに以下を追加します(もちろんexample.comの代わりにあなたのクライアントのドメインを使用します):

define('WP_SITEURL', 'http://example.com');
define('WP_HOME',    WP_SITEURL);

301 template_loaderwp_safe_redirect()を使ったリダイレクト

.htaccess@ Kau-Boyのように修正することで、残りの質問の大部分を解決できます。または PHP でそれを実行できます。 WordPressには、template_redirect HTTPステータスコードでリダイレクトするためのwp_safe_redirect()関数とともに、これに使用できる301フックがあります。お分かりのように、残りはPHPコードとちょっとした正規表現マジックにまみれています。このコードをテーマのfunctions.phpファイルの実質的にどこにでも置くことができます。

add_action('template_redirect','my_template_redirect');
function my_template_redirect() {
  $redirect_to = false;
  list($url_path,$params) = explode('?',$_SERVER['REQUEST_URI']);
  $path_parts = explode('/',trim($url_path,'/'));
  switch ($path_parts[0]) {
    case 'products-directory':
      $redirect_to = '/products-top-level-page';
      break;
    case 'about-directory':
      $redirect_to = '/about-top-level-page';
      break;
    case 'services-directory':
      $redirect_to = '/services-top-level-page';
      break;
    default:
      if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
        $category = str_replace('.html','',$match[1]);
        $redirect_to = "/newcategory/{$category}";
      } else {
        // Do whatever else you need here
      }
  }
  if ($redirect_to) {
    wp_safe_redirect($redirect_to,301);
    exit();
  }
}

SEOだけでなく、使いやすさを考慮してください。

あなたが本当に#2をやりたいかどうか私は尋ねますか?サイトをユーザにとって使い勝手の悪いものにするのは、知覚されたSEOのためだけに最適化されたもの(および このグループの創設者兼ワンオーガナイザーとしてのもの 私はSEOの初心者ではありません)むしろ、URLパスの最初のセグメントから"-directory"をドロップするだけです。とにかくJMTCW。

404ページを生成しますか?

404を発行する必要がある場合は、ヘッダーを使用してそれを実行できます。

header("HTTP/1.0 404 Not Found");
exit;

しかし、私はそれがあなたがやりたいことではないと思います、正しいですか?上記のPHP関数を変更し、HTTPリクエストに301で応答することで、必要なリダイレクトロジックをすべて実現できると思います。

メディアライブラリへの画像のインポートと301リダイレクト

あなたはそれらをメディアライブラリに移動することができ、そうすることであなたはそれらを前進させながら管理することができるでしょう。これは役に立つかもしれないプラグインです(3.0で動作しているかどうかはわかりませんが、そうでなければそれはとにかく動作するのに良いコードベースかもしれません):

画像のURL 301をハードコーディングして配列を使用してリダイレクトする

1回限りのもの になるので、単純に イメージのURLを配列にハードコードして にして、リダイレクト機能で一致させることができます。上記のコードからswitchステートメントのデフォルトを変更すると、次のようになります。

default:
  if (preg_match('#same-Word(.*)#',$path_parts[0],$match)) {
    $category = str_replace('.html','',$match[1]);
    $redirect_to = "/newcategory/{$category}";
  } else {
    $images = array(
      '/images/image1.jpg' => '/wp-content/uploads/2010/08/image1.jpg',
      '/images/image2.jpg' => '/wp-content/uploads/2010/08/image2.jpg',
      '/images/image3.jpg' => '/wp-content/uploads/2010/08/image3.jpg',
      );
    if (in_array($url_path,$images)) {
      $redirect_to = $images[$url_path];
    } else  {
      // Do whatever else you need here
    }
  }

preg_match()を使用して301 URLパターンで画像をリダイレクトする

もちろん、画像のURLがパターンに従っている場合は、代わりにpreg_match()を使用してimages配列の大部分またはすべてを合理化できます。

if (preg_match('#^/images/(.*)$#',$url_path,$match)) {
  $redirect_to = "/wp-content/uploads/2010/08/{$match[1]}";
}

お役に立てれば?

8
MikeSchinkel

あるパーマリンク構造から別の構造へ変更するためのプラグインがありますが、これはあなたのニーズには十分ではないと確信しています。いくつかの.htaccess書き換え規則を使用する必要があります。私はあなたにあなたの必要性のためにいくつかの例を挙げることを試みる(それらがすべて正しいかどうかわからない)。これらの行をすべて、サーバーのルートにある ".htaccess"というファイルに含めます。ワードプレスのルールの上にそれを出します:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
# your rules start here. Keep the following lines that has been produced by wordpress
RewriteBase /
RewriteRule wp/(.*)$ /$1 [R=301]
RewriteRule /products-directory/(.*)$ /products-top-level-page [R=301]
RewriteRule /about-directory/(.*)$ /about-top-level-page [R=301]
RewriteRule /services-directory/$ /services-top-level-page [R=301]
RewriteRule /same-Word(.*)$ /newcategory/$1 [R=301]

フラグ[R = 301]はクライアントブラウザまたは検索エンジンに、それが恒久的なリダイレクトであることを伝えます。

あなたはおそらくあなたのワードプレスデータベース内のすべてのパーマリンクを更新したいでしょう。データベース内の文字列の更新に関する 記事を書きました 。残念ながら、私はまだ投稿を翻訳していません。しかし、クエリは明確であるべきです、そうでなければ単にMySQLのドキュメントを使用してください。

1
2ndkauboy

私はこれを使用します。 Simple 301 Redirects plugin - 以前は数ページ使用していましたが、すぐにWebデザインサイトをWPファイル内のすべてのファイルとフォルダと共に移動します。

0
Steve Shearer