PDFドキュメント(数学ペーパー)をホストするWebサイトがあります。 Webサイトのメインページには、ドキュメントへのリンクがあります。
http://example.com/download.php?file=Document.pdf
download.php
スクリプトの目的は、ドキュメントをダウンロードするIPアドレスを記録することです。
これで、リンクをたどってドキュメントを表示/ダウンロードすることもできます
http://example.com/Document.pdf
このセットアップには、SEOの観点から不利な点がありますか(コンテンツの重複)?そして、はいの場合、どうすればそれを改善できますか?
はい、これは重複コンテンツです。 2つの異なるURLから同じコンテンツにアクセスでき、正規化はありません。
基本的に、これは検索エンジンがSERPに戻るためにどちらかを選択することを意味します。ランキングは基本的に2つのURLに分割されます。
両方のURLがリンクに使用されます。
どちらが正規/優先URLであるかを決定し、その1つのURLのみにリンクする必要があります。
簡単にするために、リストした2つのURLのみを検討します。優先URLは、ダウンロードスクリプト(つまりdownload.php
)を経由するURLのように見えますが、そうでない場合は、ファイルをダウンロードするユーザーのIPを追跡しません。
すでにインデックスされているURLを解決するには、直接リンクをスクリプトに外部的にリダイレクトできます。 Apacheを想定すると、ルート.htaccess
ファイルで次のようなことができます。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+\.pdf)$ /download.php?file=$1 [R=302,L]
これにより、/Document.pdf
(ファイルシステム上に物理ファイルとして存在する場合のみ)の要求が/download.php?file=Document.pdf
にリダイレクトされます。
$1
は、RewriteRule
パターン(つまり([^/]+\.pdf)
)で最初にキャプチャされたグループへの後方参照です。
302
(一時的)リダイレクトを301
(永続的)に変更します(正常に機能していることが確認できたら)。 301はブラウザによってキャッシュされるため、テストに問題が生じる可能性があります。
さらに一歩進んで、/download/Document.pdf
のような「ユーザーフレンドリーな」URLを作成できます。これは、正規のURL(リンク先のURL)になります。
この場合、ベース名も「ダウンロード」(つまり、download.php
vs /download
)のファイルがあるため、MultiViews
が無効になっていることを確認する必要があります。そうしないと、mod_negotiationは、URLを書き換える前にdownload.php
(リクエストに応じて)の内部サブリクエストを行う可能性があります。したがって、.htaccessの先頭に:
Options -MultiViews
/Document.pdf
または/download.php?file=Document.pdf
への直接リクエストは、正規URLに外部リダイレクトにする必要があります。例えば:
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([^/]+\.pdf)$ /download/$1 [R=301,L]
RewriteCond %{THE_REQUEST} GET\ /download\.php\ HTTP
RewriteCond %{QUERY_STRING} ^file=(.+\.pdf)$
RewriteRule ^download\.php$ /download/%1 [R=301,L]
%1
(上記の$1
とは対照的に)は、最後に一致したRewriteCond
への後方参照です。CondPattern(つまり、(.+\.pdf)
)。
リダイレクトループを防ぐには、THE_REQUEST
をチェックする追加のRewriteCond
(条件)が必要です。 (THE_REQUEST
には元の要求ヘッダーが含まれ、URLが書き換えられても変更されません。)
/download/Document.pdf
は、内部的に書き換えられたが「実際の」URLになります。すなわち。 /download.php?file=Document.pdf
。それが示唆するように、内部書き換えはサーバーの内部です。外部HTTPリクエストはありません。アドレスバーのURLは変更されません。エンドユーザーからは完全に隠されています。
RewriteRule ^download/([^/]+\.pdf)$ download.php?file=$1 [L]
このディレクティブには、外部リダイレクトをトリガーするR
(redirect
)フラグがないことに注意してください。
理想的には、正規表現をできるだけ制限するようにします。たとえば、上記の正規表現では、.+
はany文字(1以上)に一致します。ただし、ファイル名が大文字と小文字のみで構成されている場合は、文字のみに一致するように正規表現を変更することをお勧めします。例えば。 [a-zA-Z]+
。