Durandal 2.0 のデフォルト ルーターの動作を置き換えて、デフォルト ルートを置き換えることは可能ですか。ページを検出するためのスパイダーは ajax クロール可能です。ハッシュタグだけでなく、URL にハッシュバンを挿入する必要があります。どんな助けでも大歓迎です。
ありがとう!
Durandal 2.0 のデフォルト ルーターの動作を置き換えて、デフォルト ルートを置き換えることは可能ですか。ページを検出するためのスパイダーは ajax クロール可能です。ハッシュタグだけでなく、URL にハッシュバンを挿入する必要があります。どんな助けでも大歓迎です。
ありがとう!
私の知る限り、Durandal 2.0 ではこれができません。router
およびプラグインはこれhistory
をサポートしていません。コード内に#
.
ただし、これはあなたのシナリオでは問題ではないと思います。アプリケーションをクロール可能にするという要件に対処する方法を変更する必要があるかもしれません。
#
アプリケーションのメイン HTML でメタ フラグメント タイプを指定することにより、アプリケーションを SEO 互換にすることができます。
<meta name="fragment" content="!">
つまり、リンクには がなく#!
、アプリケーションが JavaScript レンダリングを使用していることを Google に伝えています。その後、クローラーからのリクエストには
?_escaped_fragment_
.
したがって、アプリでは次を使用します。
mysite.com/#myroute
クローラーは以下を要求します。
mysite.com?_escaped_fragment_=myroute
メタ フラグメント タグの詳細については、クロールに関するGoogle のドキュメントのセクション 3 を確認してください。
提案
この機能を最大限に活用したい場合は、Durandal 2.0 で次のようにルーターをアクティブにして pushState を使用することをお勧めします。
router.activate({ pushState: true } );
また、メタ フラグメント タグも含まれます。
<meta name="fragment" content="!">
pushState を使用する場合に考慮すべき事項:
古いブラウザーをサポートする予定がない場合にのみ、pushState を使用してください。
サーバー側の pushState を準備する必要があります。これは、サーバーが要求されたときにmysite.com/myroute
、同じ JS アプリケーションを返すことができ、クライアントがクエリ文字列パラメーターを処理できるようにする必要があることを意味します。たとえば、ASP.NET を使用している場合、これは IIS URL 書き換えを使用して実現できます。このトピックに関する良いブログ投稿があります。