「本格的な」Ajax (クライアント側のルーティングなど) を実行している場合は、次の手法が役立つ可能性があります。
- GET/"?" パラメータなしで URL を使用します (これにより、後で作業が楽になります)
- クライアント側のルーティングにはhttp://baseurl.com/#!/path/to/resourceを使用します
- http://baseurl.com/path/to/resourceで、サイトの非スクリプト HTML バージョンのレンダリングを実装します (HTML スナップショットは Google が呼ぶものです)。
- HTML スナップショットのコンテンツ全体を noscript タグでラップし、top.location.href 経由でサイトの完全版にリダイレクトします。
- http://baseurl.com/?_escaped_fragment=/path/to/resourceを処理します - 301 レスポンス経由で http://baseurl.com/path/to/resource にリダイレクトする必要があります
- GET リンクには a タグのみを使用し、POST/PUT/DELETE リンクにはフォームを使用します - 必要に応じてスタイルを完全に解除します
「適切な Ajax コードの書き方」を調べているときに見つけたリンクの素敵なサンプル コード:
<a href="/path/to/resource" onclick="Routing.navigate("/path/to/resource"); return false;">Resource</a>
もちろん、これはかなり複雑なソリューションですが、SEO (検索エンジン以外のクローラーを含む) とアクセシビリティの両方を有効にする必要があります。問題は、ページのサーバー側とクライアント側をレンダリングできる必要があることです。
1 つの解決策は、さまざまなプラットフォームの実装が存在する口ひげのようなテンプレート フレームワークを使用することです。
- ページの動的部分には {{#pagelet}}/path/to/partial{{/pagelet}} のようなものを使用します - 例: {{#pagelet}}/image/{{image_id}}/preview{{/pagelet }}
- クライアント側のレンダリングでは、ページレットが実装され、Ajax を介してロードされたものに動的に置き換えられます (例: render )
- サーバー側のレンダリングでは、ページレットは直接レンダリングされます (ページレットをカールしてすぐにレンダリングするか、コードを非同期に記述できる場合は、クライアント側で行うのと同じように実行します: 一時的なスパンをに書き込みますすべてのページレットのフェッチを開始し、ページレットが到着すると一時的なスパンを置き換え、すべてのページレットがレンダリングされたらバッファーをフラッシュします。
これは、私が今まで見つけた中で最高の一般的なデザインです。アプリにディープリンクできます。検索エンジンにやさしく、適切に劣化するページを作成する必要があります。
PS: 上記の手法の利点の 1 つは、ページの Ajax レンダリングと "Web 1.0" レンダリングの両方が、ページレット全体の memcached キャッシュから利益を得ることができることです。