2015-09-07 13 views
13

Angular設定では、Angular UI-routerを選択して表示を切り替えました。Angular UI-Routerの動的ビューでのSEOに優しいUrl Slugの追加

.config(function($stateProvider, $urlRouterProvider) { 

    $urlRouterProvider.otherwise('/app/home'); 

    $stateProvider 

    // Nav 
    .state('app', { 
     url: '/app', 
     templateUrl: 'templates/navbar.html', 
     abstract: true, 
     controller:'AppCtrl as app', 
    }) 

    // Home 
    .state('app.home', { 
     url: '/home', 
     templateUrl: 'templates/home.html', 
     controller:'HomeCtrl as home', 
    }) 

    .state('app.browse', { 
     url: '/browse', 
     templateUrl: 'templates/browse.html', 
     controller:'BrowseCtrl as browse', 
    }) 

    .state('app.browse-detail', { 
     url: '/browse/:productId', 
     templateUrl: 'templates/browse-detail.html', 
     controller:'BrowseDetailCtrl as detail', 
    }) 

}) 

これは、次のように製品のURLが表示されることとなります:

代わり
www.website.com/app/#/browse/productId 

私のようなものを見たいのですが、次のように

私のconfigが見えます

www.website.com/browse/productId/most-awesome-product 

ここで、most-awesome-productです。Slug

私の質問は以下のとおりです。

  • 一般に角度ウェブサイトを作るの原理は、ルーティングを使用して友好をSEOていますか?
  • URLスラッグ(上記参照)を追加して私のルーターのURLを変更するにはどうすればよいですか?
  • 私のウェブサイトのSEOをフレンドリーにするURLを変更しますか?

ありがとう!

+1

私はまた、ライブラリ(https://github.com/jjbskir/angular-prerender)に取り組み、SEOと素敵なURLを手助けするためにhtmlページを事前に準備しています。 – jjbskir

答えて

8

Googleは1つのページアプリをもっと親切にしたいと思っていますが、どのくらい離れているかはわかりません。

www.website.com/app/browse/productId 

私の問題:あなたのセットアップを使用してこれを実現するために

一つの方法は、あなたの設定$locationProvider.html5Mode(true);に追加し、

www.website.com/app/#/browse/productId 

にURLを向けるだろう、あなたのHTMLヘッダー<base href="/app/" />の下に追加することですこの設定では、www.website.com/appなどのフロントエンドに1つのエントリポイントだけを出力するようにサーバーを設定する必要があることがわかりました。これを設定するにはtutorialがあります。

4

#を保存する必要があります。従来のブラウザの代替手段としてのURL

あなたのサイトをインデックスに登録するには、もうHTMLスナップショットは必要ありません。 私は

  1. サイトマップ
  2. pushstateせずにセットアップ以下でインデックスサイト持っている "#を!" URL
  3. 標準タグ
  4. コンテンツは#でアクセス可能です。通常のルーティングでは、インデックスで必要なURLを参照する必要があります。私はこのスニペットを使用してパラメータを正規のタグを使用するためには

を(私はhttpsの+ HTML5 UIルータのURLを持っている):https://github.com/w11k/w11k-angular-seo-header

いけない削除したときに、インデックスファイルに、サーバー上のすべての要求をリダイレクトすることを忘れハッシュバング。

+0

有望なサウンド。見た目の例を教えてもらえますか? App.js – JohnAndrews

+0

URLからIDを削除してアプリケーション内に戻してみませんか?シームは最も簡単な方法です。または、別のURLパラメータとして商品名を使用するだけです。 pagetitleで彼にアクセスするには、指定されたディレクティブでtitleExtendを使用します。 – Carka

3

あなたがたindex.htmlページでは

$locationProvider.html5Mode(true); 

を追加web.configファイルではその

ためhtml5Modeを使用する必要が

<base href="/"> 

それは十分ですが、ページを更新する時期それはエラーを与えるので、URLを書き換えを使用する必要がありますので、web.configに追加

<system.webServer> 
    <rewrite> 
    <rules> 
     <rule name="Main Rule" stopProcessing="true"> 
     <match url=".*" /> 
     <conditions logicalGrouping="MatchAll"> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />         
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="/" /> 
     </rule> 
    </rules> 
    </rewrite> 
</system.webServer> 

そして、あなたの状態がジャストルート設定ファイルにコードの行を追加しますAngularJS HTML5 mode reloading page not found solution

+0

どこにweb.configを入れますか? – JohnAndrews

1

を参照してください詳細については、この

.state('app.browse-detail', { 
     url: '/browse/:productId/:slug', 
     templateUrl: 'templates/browse-detail.html', 
     controller:'BrowseDetailCtrl as detail', 

のように、変更する必要があります。

$locationProvider.html5Mode(true); 

とインデックスで.html追加:

<base href="/"> 

これで問題は解決します。

関連する問題