robots.txtおよびsitemap.xmlファイルは、.htaccessリダイレクトを介して動的にできますか?


12

多言語、マルチドメインのサイトがあります。独自のCMSインストール(Drupal)で実行されるため、ルートディレクトリは1つです。したがって、静的なrobots.txtがある場合、私が知る限り、単一のドメインのファイルしか表示できません。

.htaccessに行を入れてもらえますか

Redirect 301 /robots.txt /robots.php

(または同等の指示。許可されている場合は指示してください)

したがって、動的なphpファイルにリダイレクトされます$_SERVER['HTTP_HOST']

また、sitemap.xmlについても同じ質問なので、異なるドメインごとに異なるリンクを示す動的なsitemap.phpを提供できます。

.txtと.xmlを使用しない場合の問題は、前述のように、すべてのドメインがサーバーコンピュータの単一の物理ディレクトリを共有することです。


回答:


11

任意のファイルを動的にすることができます。そのための最良の方法は、リダイレクトではなく、書き換えルールを使用することです。

RewriteRule ^robots\.txt$  /robots.php [L]

このようにして、動的スクリプトを使用して機能を提供しますが、URLは変更されません。ほとんどのクローラー(Googlebotを含む)はrobots.txtのリダイレクトに従いますが、リダイレクトを導入すると一部のクローラーは混乱します。

PHPを使用していても、robots.txtは各ドメインの各クローラーに対して静的であるように見えるはずです。ドメインごとに、またはユーザーエージェントごとに異なるコンテンツを提供することは問題ありません。ただし、ランダムに、または時間帯に基づいて異なるコンテンツを提供すると、検索エンジンのクローラーを混乱させ、SEOを台無しにする可能性があります。


サイトマップには、好きな名前を付けることができます。それらをリダイレクトするか、書き換えルールを使用して、同じURLで動的にそれらを強化できます。次のように名前を付けることもできます

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-sitemap.xml

次にrobots.txtでそれらを参照します

Sitemap: http://www.example.com/example-sitemap.xml

または、ウェブマスターツールまたは検索コンソールを介して手動で検索エンジンに送信します。


ご返信いただきありがとうございます。タイプミスの可能性があるものを修正してください。機能したのはw3d命令なので、コードにはRewriteRule ^robots\.txt$ robots.php [L]\記号を含めないでください。
Cesar

はい、スラッシュの付いたバージョンがapache.confファイルに適しています。.htaccessの場合は、オフにする必要があります。回答を編集して、.htaccessの適切なバージョンを含めました。
スティーブンオスターミラー

@Cesar このディレクティブがサーバー設定にある場合、パターンのスラッシュプレフィックス(つまり^/robots\.txt$)が必要になりますが、ディレクトリごとの.htaccessファイルでは一致しません。この場合、置換のスラッシュ接頭辞(つまり/robots.php)はオプションです。
MrWhite、2015年

5

はい、どのリクエストも「動的」にすることができるのと同じ方法です。

ただし、リダイレクトすることはありません(コード例のように)。mod_rewriteを使用して内部的に書き換える必要があります。(Drupalがおそらくすでに行っていることと同じです。)

たとえば、ルートの.htaccessファイルで:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine 1回だけ発生する必要があります(複数回発生しても問題にはなりません)。

.htaccessファイル内の他のディレクティブと競合しないことを確認する必要があります。そのため、これはおそらくファイルの先頭近くにあるはずです。確かに、フロントコントローラの前です。


4

サイトマップファイルを動的にすることは問題ありません。サイトマップを自動更新する良い方法です。

robots.txtファイルを動的にする(同じホストの場合!個別のホストに対してこれを行うことは、基本的に、それぞれの通常のrobots.txtファイルです)問題が発生する可能性があります。URLがサイトからクロールされるたびにクロールされるわけではありませんなので、「間違った」バージョンがキャッシュされる可能性があります。たとえば、robots.txtファイルを営業時間中にクロールをブロックするように設定すると、その後キャッシュされ、1日続く可能性があります。つまり、何もクロールされません(または、クロールが許可されている場合はキャッシュされます)。たとえば、ほとんどのサイトでは、Googleは1日1回程度robots.txtファイルをクロールします。


ここでは静的でも動的でも違いはありません。また、動的な部分を使用して、ホストごとに異なるバージョンを提供しますが、ホストはすべてコンピューターサーバーの同じ物理ディレクトリを共有しているため、robots1.txt、robots2.txt、robots3.txt(numbers私たちがどのドメインにいるのかを意味します)。
Cesar

ここで動的とは、彼らが毎回異なるコンテンツを提供したいと思っていることを意味するとは思わない。彼らは、PHPコードでホスト名に基づいて決定を下せるように、PHPを介してそれを強化したいだけです。私はよくrobots.txtを動的にして、さまざまなユーザーエージェントにさまざまなルールを提供します。
スティーブンオスターミラー

2
ええ、先ほど触れたように、複数のホストに対してそれを行うことは、基本的に、ホストごとに個別のrobots.txtファイルを作成することに似ていますが、これは問題ありません。ただし、動的robots.txtファイルを使用して時間帯によってクロールを制御しようとするサイトが見られることがあります。これは多くの問題を引き起こします。
John Mueller

いい視点ね。承認された回答を編集しましたが、robots.txtが非常に動的にならないように警告しました。
スティーブンオスターミラー

0

次の理由により、sitemap.phpを作成する必要はありません。1.言語ごとに個別のsitemap.xmlファイルを実行し、それぞれを検索エンジンコンソールで指定できます。2.標準のサイトマップファイルを定期的に書き換えて最新のコンテンツを含めることができ、動的な方法でそれらを作成できます。そのため、.phpは必要ありません。標準の拡張子.xmlで同じファイルを再作成するのは、内部更新メカニズムとcronの役割です。

Sitemap.xmlファイルは静的であり、更新のみで動的になります。リアルタイムで更新されるわけではありません。毎分書き換えるようにすることは可能ですが、次の理由により必要はありません。1。Googleが最後の送信から1時間以内にチェックしない2.サイトマップファイルが大きい場合、それらを書き換える多くの場合、サーバーのパフォーマンスが向上します。

大量のデータがあり、サイトマップファイルが50MBを超える場合は、複数のサイトマップを持つシステムが必要です。つまり、sitemap2,3 ... .xmlはメインファイルのリストに追加されますが、これらのファイルのコンテンツは、これらのファイルが(たとえばcronによって)再作成されるまで固定されたままになります。

また、検索エンジンがファイルにアクセスすると、(手動で行わない限り)非常に高速に戻ることはありません。通常のsitemap.xml自体は動的で、1日または1週間にわたって新しいコンテンツで更新できるため、sitemap.phpのリアルタイム更新を作成する必要はありません。

sitemap.phpを使用しているプロは思いつきません。これらのファイルを使用する他のより良い/適切な方法があるので、それは役に立ちません。


動的が優先されるいくつかの理由:サイトマップは多くのディスク容量を消費しますが、動的に生成すると何も消費しません。サイトマップは最新の状態に保つ必要があり、動的サイトマップはそれを行う簡単な方法である可能性があります。
スティーブンオスターミラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.