web-dev-qa-db-ja.com

htaccessとcanonical / noindexを使用してGoogleインデックスから複数のパラメーターを正しく削除する方法

単一のURLパラメーターを削除するのに最適な答えのある同様の質問を見つけました。ただし、インデックスを作成したくない20以上のURLパラメーターがある場合はどうなりますか?

また、以下のソリューション例では、パラメーター範囲を指定することを前提としています(例:?id=0?id=9)...私の状況では、 ?idパラメータ。URL文字列の後に続くものに関係なく。また、?startおよび?Pageパラメーターのインデックスを作成したくないとしましょう。次のコードの改訂版を手伝ってくれませんか?

NOINDEXの場合:

<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule .* - [E=NOINDEX_HEADER:1] 
</IfModule>

<IfModule mod_headers.c>
Header set X-Robots-Tag "noindex, follow" env=NOINDEX_HEADER
</IfModule>

正規の場合:

<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$
RewriteRule .* - [E=CANONICAL_HEADER:1]
</IfModule>

<IfModule mod_headers.c>
Header set Link '%{HTTP_Host}%{REQUEST_URI}e; rel="canonical"' env=CANONICAL_HEADER
</IfModule>

上記のコードについては、@ Evgeniyおよび@ JohnMuellerに感謝します。
参照: Googleインデックスからパラメータを正しく削除する方法

3
Bryan Earl

本当に必要なのは、rel="canonical"ヘッダーを設定することだけです。これは、標準URL(URLパラメーターを持たないURL)のみがSERPに表示されるようにするのに十分なはずです。このようなURLにnoindex robotsメタタグを設定すると、IMOが過剰になります(そして少し危険です)。

おそらく、HTML自体にrel="canonical"メタタグを設定できないのでしょうか?

... 20個以上のURLパラメータがあり、インデックスを作成したくない場合はどうなりますか?

anyURL params(つまり、クエリ文字列)をインデックスに登録したURLを望まないと言うのは安全ですかその場合、次のようにRewriteCondディレクティブを変更するだけです。

RewriteCond %{QUERY_STRING} .

つまり、任意の長さのクエリ文字列があります。

ただし、20specificURL paramsを除外する場合は、それらのすべてに名前を付ける必要があります。例えば:

RewriteCond %{QUERY_STRING} (?:^|&)(id|start|page|another)=

(?:^|&)は、sidlastpageなどのようなものではなく、これらの特定のパラメーター名のみに一致することを保証する非キャプチャーグループです(URLパラメーター名になり得る場合)。

Header set Link '%{HTTP_Host}%{REQUEST_URI}e; rel="canonical"' env=CANONICAL_HEADER

これは無効です。 scheme(例:http)、%{HTTP_Host}変数の後にe記号がありません(これは500エラーになります) URLを囲む角括弧(<..>)。これは次の形式である必要があります。

Header set Link '<http://%{HTTP_Host}e%{REQUEST_URI}e>; rel="canonical"'

参照:(正規URLに関するGoogleのサポートドキュメント)
https://support.google.com/webmasters/answer/139066?hl=en

UPDATE:ただし、%{REQUEST_URI}e環境変数は、このコンテキストで使用される場合、includesクエリ文字列-この演習のオブジェクトを実際に無効にします。このブロック全体を次のように書き換える必要があります。

RewriteCond %{QUERY_STRING} .
RewriteRule (.*) - [E=CANONICAL_URI:$1]
Header set Link '<http://%{HTTP_Host}e/%{CANONICAL_URI}e>; rel="canonical"' env=CANONICAL_URI

REQUEST_URI変数を使用する代わりに、RewriteRuleディレクティブを使用して(クエリ文字列を除く)URLパスのみをキャプチャし、これをCANONICAL_URI変数に格納します。これは、代わりにHeaderディレクティブで使用されます。

ここには<IfModule>コンテナも必要ありません。それは機能するか壊れますが、これらのディレクティブはオプションであることを意図していません(そうですか?)。

3
MrWhite

リダイレクトとメタタグに加えて、Google Search Consoleで特定のURLパラメータを設定することにより、Googleが特定のURLパラメータのインデックスを作成しないようにすることができます。 https://support.google.com/webmasters/answer/6080550?hl=en

「ページコンテンツに影響を与えない」パラメータを設定できます。これは、実際にページを変更しないトラッキングパラメータ用です。この設定により、Googlebotはそれらをクロールできますが、それらを使用せずにバージョンにインデックスを付けます。

また、「ページコンテンツの変更」にパラメータを設定してから、「URLをクロールしない」こともできます。これにより、GooglebotはこれらのURLにパラメーターを設定してクロールしなくなります。その場合、ほとんどがインデックスから外れます。パラメーターを使用しないページと比較して、コンテンツの重複を引き起こすページネーションとソートのパラメーターにこれを使用できます。

1