5

需要一些建议。我几乎没有 SEO 经验。使用 MVC 3 为我妻子的新业务构建一个小册子网站。我在顶部使用链接进行了一些导航。

<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 报告,它显示了 SEO 违规和错误,因为 /Home/Contact 没有元描述或标题(因为如果你直接导航到它,它是一个没有头部标签的部分视图网址)。我所有其他导航链接都一样。

我的问题是,最好只为每个部分使用整页回发,以便我在每个页面上获得标题和描述?或者有什么方法可以在不破坏我的 SEO 的情况下仍然使用 ajax 进行导航。我知道没有完美的答案,所以提前感谢您的任何意见。

4

1 回答 1

5

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

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

@{
    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 到 Home/About 操作的链接。在默认模板中,您仍然在顶部角落的默认模板导航部分中有完整的请求链接用于测试。

接下来,您的家庭控制器

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

现在,从默认项目模板中只更改了这两件事,单击主导航中的 About 链接会完整请求并显示 About 页面,包括页面标题、所有头部信息等。但是,单击Home/Index 视图中的 ajax 链接将为该信息执行 AJAX 请求。您将看到 AjaxReponse div 仅填充了 About 视图的 HTML,不会遇到其他任何内容(布局等)。

实施这样的事情不仅可以帮助您的 SEO,而且不使用 JavaScript 的人仍然可以使用您的网站,功能齐全。

编辑

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

于 2012-04-12T04:21:33.680 回答