2012-04-12 72 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; 
    }); 
}; 

Where/Home/Contact返回部分视图。我使用ajax加载的原因是,我没有在每次点击重新加载所有页面内容时得到整页回发。

因此,我在我的网站上运行IIS搜索引擎优化报告,它显示了SEO违规和错误,因为/ Home/Contact没有元描述或标题(因为它是一个不带头标的局部视图,如果你直接导航到该网址)。我的其他导航链接也一样。

我的问题是,最好是仅使用每个部分的完整页面回传,以便在每个页面上获得标题和说明?或者有没有一些方法仍然使用Ajax导航没有搞砸我的搜索引擎优化。我知道有没有完美的答案,所以提前感谢任何输入。

+1

看看...https://developers.google.com/webmasters/ajax-crawling/docs/learn-more – Trent 2012-04-12 02:41:41

+0

您的动作中是否使用[ChildActionOnly]属性? – 2012-04-12 06:36:23

+0

尼斯链接,谢谢。 – 2012-04-12 12:29:33

回答

5

当您从控制器操作返回时,MVC3会执行一些特殊的操作。当您从控制器返回部分视图结果(return PartialView();)时,您可以引用“全视图”,剃须刀引擎将忽略该视图的布局文件并仅返回内容部分。在你的情况下,你可以检查请求是否是AJAX请求。基于此,请返回所请求URL的部分视图的完整视图。您可以在MVC3的默认“Internet站点”模板上尝试使用/ expirament,只更改两个文件。

首先,您的主页/索引视图:

@{ 
    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链接到首页/动作。在默认模板中,您仍然在顶端的默认模板导航部分中有完整的请求链接进行测试。

接下来,您的主控制器

using 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(); 
     } 
    } 
} 

现在,只有这两样东西从默认的项目模板改变,点击关于在主导航链接不完整的页面标题关于页面的完整请求和展示,所有的你的头信息等等。但是,单击Home/Index视图中的ajax链接将对该信息执行AJAX请求。你会看到AjaxReponse div只填充了关于视图的HTML,其他的东西(布局等)都不会出现。

不仅会执行这样的事情帮助您的搜索引擎优化,但也不使用JavaScript的人仍然可以使用您的网站,充分发挥功能。

编辑

你不能用上面的例子中使用.load功能(至少在我的测试)。原因:.load不会将X-Requested-With标头设置为标识它是AJAX请求。我敢肯定,有一些解决方法,但是注意到这是你正在使用的,并且认为如果你选择这条路线,它可能会成为一个绊倒危险。

+0

伟大的答案男人,非常感谢!我正在考虑做这样的事情,我昨晚无法将我的头围绕实施。再次感谢。 – 2012-04-12 12:36:51

+0

没问题 - 最近我遇到了这种情况,并认为这确实很酷。 – Tommy 2012-04-12 14:15:59