Ajax で生成されたコンテンツをクロール可能にすることに関する Google のポリシー、およびこの件に関する多くの開発者のブログ投稿と Stackoverflow の Q&A スレッドを読んだ後、JavaScript/Ajax で生成されたものだけでサイトを作成する方法はないという結論に達しました。 HTML クロール可能。私が現在取り組んでいるサイトでは、かなりの量のコンテンツがインデックスに登録されていません。インデックス付けされていないコンテンツのすべてのプレゼンテーション レイヤーは、Ajax ベースの Web サービス呼び出しから返された JSON から HTML を生成することによって JavaScript で構築されています。そのため、Google はコンテンツをインデックス化していないと考えています。あれは正しいですか?
唯一の解決策は、検索エンジン (特に Google) 用のサイトの「フォールバック」バージョンを用意することです。ここでは、すべての HTML とコンテンツが従来どおりサーバー側で生成されます。JavaScript が有効になっているクライアントの場合、JavaScript を使用して、非同期にロードされた JSON から HTML を生成するという、基本的に現在と同じアプローチを使用できるようです。
読んでみると、上記のクロール可能な Ajax 生成 Web サイトを作成する際にDRY 原則を適用するための現在のベスト プラクティスは、クライアント側とサーバー側で同じテンプレートを使用できるテンプレート エンジンを使用することであると理解しています。JavaScript が有効になっているクライアントの場合、クライアント側のテンプレート エンジン ( mustache.jsなど) は、サーバーから送信された JSON データを、テンプレート ファイルのコピーで定義された HTML に変換します。また、JavaScript が無効になっている検索クローラーとクライアントの場合、同じテンプレート エンジン ( mustache.javaなど) のサーバー側実装は、まったく同じテンプレート ファイルのコピーに対して同様に動作し、HTML を出力します。
その解決策が正しければ、これは 4、5 年前にフロントエンドの重いサイトで使用されたアプローチとどう違うのでしょうか。サイトは基本的に、テンプレート コードの 2 つのコピーを維持する必要があり、JavaScript が有効になっているユーザー (ほぼ全員) のために 1 つのコピーを維持する必要がありました。 JavaScript が有効になっていない (ほとんど誰もいない) 検索エンジンとブラウザー用の別のコピー ( FreeMarkerやVelocityなど) はありますか? もっと良い方法があるはずです。
これは、クライアント側とサーバー側の 2 つのテンプレート モデル レイヤーを維持する必要があることを意味しますか? これらのクライアント側のテンプレートを、 Backbone.js、Ember.js、またはYUI App Libraryなどのフロントエンド MVC (MV/MVVC) フレームワークと組み合わせるのは、どの程度お勧めですか? これらのソリューションは保守コストにどのように影響しますか? フレームワーク (新しいテンプレート エンジンとフロントエンド MVC フレームワーク) を開発チームのテクノロジ スタックに追加せずに、これを試してみた方がよいでしょうか? これを冗長性を少なくする方法はありますか?
その解決策が正しくない場合、何か不足していて、JavaScript で既存の非同期 HTML-from-JSON 構造を維持し、それをインデックス化するために改善できるものがあるので、何か新しいものを導入する必要はありません。アーキテクチャスタックに? ビジネス ニーズが変化したときに、プレゼンテーション レイヤーの 2 つのバージョンを更新する必要はありません。