7

Herokuにステージングアプリとプロダクションアプリがあります。

クローラーには、robots.txtファイルを設定しました。

その後、Googleからメッセージが届きました。

親愛なるウェブマスター、あなたのサイトのホスト名https://www.myapp.com/は、SSL証明書の「サブジェクト名」のいずれとも一致しません:
*。herokuapp.com
herokuapp.com

Googleボットは、ステージングアプリでrobots.txtを読み取り、このメッセージを送信します。クローラーがファイルを読み取れないようにするために何も設定しなかったためです。

ですから、私が考えているのは、ステージングと本番の間で.gitignoreファイルを変更することですが、これを行う方法がわかりません。

これを実装するためのベストプラクティスは何ですか?

編集

私はこれについてグーグルで検索し、この記事を見つけましたhttp://goo.gl/2ZHal

この記事では、基本的なラック認証を設定するように指示されており、robots.txtについて気にする必要はありません。

基本認証がグーグルボットを防ぐことができることを私は知りませんでした。この解決策は、.gitignoreファイルを操作する方が良いようです。

4

2 に答える 2

13

Rails 3の優れたソリューションは、Rackを使用することです。プロセスの概要を説明するすばらしい投稿があります:Rackを使用したさまざまなRobots.txtの提供。要約すると、これをroutes.rbに追加します。

 # config/routes.rb
 require 'robots_generator' # Rails 3 does not autoload files in lib 
 match "/robots.txt" => RobotsGenerator

次に、lib/robots_generator.rb内に新しいファイルを作成します

# lib/robots_generator.rb
class RobotsGenerator
  # Use the config/robots.txt in production.
  # Disallow everything for all other environments.
  # http://avandamiri.com/2011/10/11/serving-different-robots-using-rack.html
  def self.call(env)
    body = if Rails.env.production?
      File.read Rails.root.join('config', 'robots.txt')
    else
      "User-agent: *\nDisallow: /"
    end

    # Heroku can cache content for free using Varnish.
    headers = { 'Cache-Control' => "public, max-age=#{1.month.seconds.to_i}" }

    [200, headers, [body]]
  rescue Errno::ENOENT
    [404, {}, ['# A robots.txt is not configured']]
  end
end

RobotsGenerator最後に、move robots.txtをconfigフォルダー(またはクラスで指定した場所)に必ず含めてください。

于 2012-11-27T05:22:32.657 に答える
6

/robots.txt静的ファイルを使用する代わりに、コントローラーアクションを使用して動的にサービスを提供するのはどうですか?環境に応じて、検索エンジンによるアプリケーションのインデックス作成を許可または禁止します。

于 2012-08-05T07:27:36.897 に答える