Googlebot が JS アプリを完全に表示するように Discourse を設定しようとしていますが、ほぼ完了しました。
@pfaffman の協力と、以下のコード(rails コンソールで実行)により、Chrome でユーザーエージェントを Googlebot または Googlebot スマートフォンに偽装して JS アプリを表示させることができました。
SiteSetting.non_crawler_user_agents="trident|webkit|gecko|chrome|safari|msie|opera|goanna|discourse" + 'rss|bot|spider|crawler|facebook|archive|wayback|ping|monitor|lighthouse'
しかし、Google のモバイルフレンドリーテスト(または Google 検索コンソールの URL 検査)でテストすると、空白のスクリーンショットと以下の HTML が表示されます。
Bing も同様ですが、Bing ではコンテンツが表示されます。Bing がコンテンツを表示するのは、そのクローラーが「モバイル」ではないためだと思います。関連投稿はこちら(@sam 氏による)
@david 氏とこちらの投稿によると、「機能検出」が原因のようです。
簡単な回避策があるのではないかと、控えめに楽観視しています。ツールを使用する際、10〜20回に1回程度、Googlebot がアプリを正常にレンダリングします。
Googlebot はページにアクセスする際にすべてのリソースをダウンロードしないことで有名なので、機能検出を引き起こし、ページが正しく表示される原因となっている特定の JS が読み込まれない、というのが私の仮説です。
結論として、Googlebot(または、より簡単な場合は、すべてのクローラー/ボット)に対して機能検出を無効にするにはどうすればよいでしょうか?
編集 用語が間違っているといけないので補足します。「機能検出」が meta で言及されている場合、それはブラウザ検出を指していますか?(おそらく browser-detect.js のようなファイルやその他の依存関係を使用していると思われます)
それとも、「機能検出」とは、Discourse がアプリにアクセスしようとしているテクノロジーを理解しようとする際に実行すること全般を指す広範な表現でしょうか?








