HTML5ルートを使用するAngularJSサイトがあります。 「FetchasGoogle」の実行をテストしました。結果は少し紛らわしいです:
ただし、Googleがサイトをクロールできないようにする準備がすでに整っているため、追加済みです。そのため、Googleボットは「?_escaped_fragment_ =」でページに再度アクセスします。これに従いました https:// developers .google.com/webmasters/ajax-crawling/docs/getting-started (セクション「3.ハッシュフラグメントのないページの処理」)。Nginx構成には次のようなものがあります。
if ($args ~ "_escaped_fragment_=") {
serve the static HTML snapshots
}
、そして実際、_escaped_fragment_ =を自分で渡せば、問題なく動作します。ただし、Googleボットはこのパラメータを使用してサイトをクロールしようとしたことがないため、スナップショットをクロールしませんでした。私たちは何かが欠けていますか? Nginx confにGoogleボットのエージェント検出も追加する必要がありますか?このようなもの?
if ($http_user_agent ~* "googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {
server from snapshots
}
これをもっとよく理解できれば幸いです、よろしくお願いします!
更新:
これを読んだばかりです http://scotch.io/tutorials/javascript/angularjs-seo-with-prerender-io?_escaped_fragment_=tag#caveats 。したがって、手動ツール(Fetch as Google)を使用する場合は、どちらかを渡す必要があるようです。または?_escaped_fragment_ =を適切な場所に配置します。実際、この場合に?_escaped_fragment_ =を渡すと、作成したHTMLスナップショットが表示されます。
本当?これは実際にどのように機能するのですか?
UPDATE 2このスレッドの下部で、Googleの従業員は、Googleウェブマスターの「Fetchas Google」の場合、手動で_escaped_fragment_ =パラメータを渡す必要があることを確認します。あなた自身、 https://productforums.google.com/forum/#!msg/webmasters/fZjdyjq0n98/PZ-nlq_2RjcJ
乾杯、
イラクリス
HTML5モードでSPAを開発した先月の経験に基づいて、あなたの質問に答えようと思います。
これは実際には非常に単純ですが、見落としがちです。実際、Googlebotにescaped_fragmentを試してもらうには2つの異なる方法があります。最初の方法は、非html5モードでサイトを実行することです。これは、URLが次の形式になることを意味します。
Googlebotは#を認識します!そして、変更されたURLを使用してサーバーに2回目の呼び出しを行います。
http://my.domain.com/base/?_escaped_fragment_=some/path/on/website
その後、必要に応じて処理できます。 Googlebotに_escaped_fragment_モードを試す2つ目の方法は、ボットに提供するインデックスページに次のメタタグを含めることです。
<meta name="fragment" content="!">
これにより、googlebotはタグを確認するたびに他のバージョンのウェブページをチェックします。興味深いことに、これらの両方の手法を一緒に使用することも、メタタグを使用してhtml5モードで実行することで最終的に実行したことを実行することもできます。これは、URLが次のようにエスケープされることを意味します。
http://my.domain.com/base/some/path/on/website?_escaped_fragment_=
興味深いことに、ボットはフラグメントの最後に何も配置しません。ただし、実行しているWebサーバーによっては、「_ escaped_fragment_」テキストに一致するパターンを使用してこれを代替ボットページに簡単にマッピングできます。エスケープされたフラグメントの詳細については、 ここ にアクセスしてください。
Googleのボットは2014年の初めから、実際には限られた範囲でJavaScriptを解釈できます。詳細については、Googleウェブマスターの公式ブログエントリをご覧ください こちら 。ただし、ブログエントリで明らかにされているように、これには多くの注意事項があります。例えば:
18/12/2014の時点で、Googlebotがリンクを見つける以外にインデックスのレンダリングモードでSPAから実際に情報を抽出できるかどうかはまだわかりません。 javascriptに従ってください。私たちの経験では、Googlebotはインデックスリストに{{}}を含めるため、{{}}を使用してメタ情報(説明、キーワード、タイトルなど)を入力しようとすると、サイトはGoogle検索で次のようになります。結果:
{{meta.siteTitle}}
http://my.domain.com/base/some/path/on/website
{{メタ記述}}
このように見えるかもしれないあなたが期待するものではなく:
ドメイン
http://my.domain.com/base/some/path/on/website
これは私のドメインのランダムなページです。確かに優れたサンプルページです!
Googleは、hashbang(#!)と_escaped_fragment_ paramを使用して、AJAX WebサイトのHTMLスナップショットを提供することをお勧めします。
しかし、多くの場合、新しいGoogle機能については、すべてのGoogleサービスが最初からそれをサポートしているわけではありません。
今のところ、経験上、ウェブページのインデックス作成にGoogleBotはHTMLスナップショットと_escaped_fragment_を使用していると確信しています。サーバーアクセスログをチェックして、Googleがアプリケーションでそれを実行したことを確認できます。
(現時点では、経験上、Googleによる公式なものはありません)PageSpeed Insight、ウェブマスターツールパーサー、リッチスニペットテストツールなどの他のサービス:hasbang(#!)はサポートされていません。 _escaped_fragment_を使用する必要があります。
いいえ、しないでください。さまざまな理由で:
GoogleはサイトのURLで#!を探し、#!の後のすべてを取得して、_ escaped_fragment _クエリパラメータ。一部の開発者は、実際のデータを使用して基本的なhtmlページを作成し、クロール時にサーバー側からこれらのページを提供します。だから、_ escaped_fragment _を持つサーブ側にPhantomJSを使用して同じページをレンダリングしてみませんか。詳細については、こちらをお読みください blog 。
少し時代遅れかもしれませんが、完全を期すために:
2014年5月23日からの声明 によると、Googleボットは「最新のWebブラウザのようにコンテンツを見る」ことができるようになりました。
彼らによると 2015年10月14日からの声明 GoogleはAJAXクロールスキームを非推奨にしました。
したがって、HTML5 History API(Angularのhtml5mode)を使用してもGoogleにとって問題はありません。