2012-04-12 9 views
5

アドバイスが必要です。私はほとんどSEOの経験がありません。 MVC 3を使用して私のwifes新しいビジネスのためのbrochurewareサイトを構築する。私は、リンクを使用して上部にいくつかのナビゲーションがあります。ルーティングと部分表示に関するMVC 3のSEOアドバイス

<a class="main" href="/Home/Contact">Contact Us</a> 

私はいくつかのjqueryを傍受しています。

ns.BindNavigation = function() { 
    $(".nav-bar a").click(function (e) { 
     $("#Content").load(this.href); 
     return false; 
    }); 
}; 

ここで、/ Home/Contactは部分的なビューを返します。私がAjaxのロードを使用している理由は、すべてのページのコンテンツをリロードするクリックごとに全面的なポストバックが得られないからです。

私は自分のサイトでIIS SEOレポートを実行していますが、/ Home/Contactにはメタ記述またはタイトルがないため、SEO違反とエラーが表示されています(ヘッダータグなしの部分表示ですそのURLに直接ナビゲートしてください)。他のすべてのナビゲーションリンクでも同じです。

私の質問は、各ページのタイトルと説明を得るために、各セクションの全面的なポストバックを使用するのが最善でしょうか?または、私のSEOを台無しにすることなく、まだナビゲーション用にajaxを使用するいくつかの方法があります。私は完全な答えがないことを知っているので、どんな入力についても事前に感謝しています。

+1

これを確認してください...https://developers.google.com/webmasters/ajax-crawling/docs/learn-more – Trent

+0

あなたの行動に[ChildActionOnly]属性を使用していますか? –

+0

いいリンク、ありがとう。 –

答えて

5

MVC3は、コントローラの操作から戻ったときにいくつか特別なことを行います。コントローラーから部分ビュー結果(return PartialView();)を返すと、「フルビュー」を参照することができ、そのビューのレイアウトファイルは無視され、内容部分のみが返されます。あなたのケースでは、リクエストがAJAXリクエストかどうかをチェックすることができます。これに基づいて、要求されたURLの部分ビューの全体像を返します。この2つのファイルを変更するだけのMVC3のデフォルトの「インターネットサイト」テンプレートでこれを試してみてください。

まず、あなたのホーム/インデックス表示:

@{ 
    ViewBag.Title = "Home Page"; 
} 

<h2>@ViewBag.Message</h2> 
<p> 
    @Html.ActionLink("This is AJAXy", "About", "Home", null, new{@class="ajax"}) 
</p> 

<div id="AjaxContent"></div> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $(".ajax").click(function (e) { 
      e.preventDefault(); 
      alert("clicked"); 
      $.ajax({ 
       url: this.href, 
       dataType: 'html', 
       success: function (data) { 
        $('#AjaxContent').html(data); 
        alert('Load was performed.'); 
       } 
      }); 
     }); 
    }); 
</script> 

私はアクションホーム/へのリンクをAJAXingています。デフォルトのテンプレートでは、テストのために上部のコーナーにあるデフォルトのテンプレートナビゲーションセクションに依然として完全なリクエストリンクがあります。

次に、System.Web.Mvcを使用して、ホームコントローラー

。クリックして今すぐ

namespace MvcApplication6.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      ViewBag.Message = "Welcome to ASP.NET MVC!"; 

      return View(); 
     } 

     public ActionResult About() 
     { 
      if(Request.IsAjaxRequest()) 
      { 
       return this.PartialView(); 
      } 
      return View(); 
     } 
    } 
} 

、唯一のこれら二つのものがデフォルトのプロジェクトテンプレートから変更して、メインナビゲーション内のリンクについて、完全なリクエストと表示についてのページのページタイトルとの完全な、あなたの頭の情報のすべてを行いますただし、ホーム/インデックスビューでajaxリンクをクリックすると、その情報のAJAXリクエストが実行されます。 AjaxReponse divには[About]ビューのHTMLだけが表示され、その他のもの(レイアウトなど)は表示されません。

このような実装はあなたのSEOに役立つばかりでなく、JavaScriptを使用していない人々もあなたのサイトを使い、完全に機能することができます。あなたは上記の例を(少なくとも私のテスト中).LOAD機能を使用することはできません

EDIT

。理由:.loadは、AJAX要求であることを識別するためにX-Requested-Withヘッダーを設定しません。回避策がありますが、あなたが使用していたことに気付きました。あなたがこのルートに進むことを選択した場合、旅行の危険につながる可能性があると考えました。

+0

偉大な答えの男、非常に感謝!私はこのようなことをやっていることを考えていました。私は昨晩の実装の周りで頭を包むことができませんでした。もう一度ありがとう。 –

+0

問題はありません - 私は最近このことに気づき、それが本当に涼しいと思った。 – Tommy

関連する問題