【问题标题】:MvcSiteMapProvider MVC5 CanonicalUrlMvcSiteMapProvider MVC5 CanonicalUrl
【发布时间】:2014-09-18 02:28:36
【问题描述】:

我不知道 MVC.SiteMap 出了什么问题,当我检查页面源时它不显示 CanonicalUrl。 在 _layout 文件中,我有以下内容:

@Html.MvcSiteMap().CanonicalTag()
@Html.MvcSiteMap().MetaRobotsTag()

这里是 MVC.Sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
            xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">

  <mvcSiteMapNode title="Home" controller="Home" action="Index"  metaRobotsValues="noindex" CanonicalUrl="/Home/Index">
    <mvcSiteMapNode title="Healthcare Services" controller="Home" action="Healthcare" metaRobotsValues="noindex follow"  CanonicalUrl="/Home/Healthcare"/>
    <mvcSiteMapNode title="About" controller="Home" action="About"  metaRobotsValues="noindex" CanonicalUrl="/Home/About"/>
    <mvcSiteMapNode title="Training" controller="Home" action="Training" metaRobotsValues="noindex follow"  canonicalUrl="/Home/Training"/>
    <mvcSiteMapNode title="Environmental Services" controller="Home" action="Environment" metaRobotsValues="follow" canonicalUrl="/Home/Environment"/>
    <mvcSiteMapNode title="IT Services" controller="Home" action="Internet" metaRobotsValues="noindex"  CanonicalUrl="/Home/Internet"/>
    <mvcSiteMapNode title="Our Clients" controller="Home" action="Clients" metaRobotsValues="noindex noarchive"  canonicalUrl="/Home/Clients"/>
    <mvcSiteMapNode title="Privacy" controller="Home" action="Privacy" metaRobotsValues="noindex noarchive" canonicalUrl="/Home/Privacy"/>
  </mvcSiteMapNode>
</mvcSiteMap>

非常感谢您的建议。

【问题讨论】:

    标签: c# asp.net-mvc mvcsitemapprovider


    【解决方案1】:

    canonical标签用于表示2个URL指向同一个资源(通常是内容相同或非常相似的另一个页面)。

    在您的配置中,您正在为每个节点配置其自己的控制器和操作,没有迹象表明存在另一个具有相同内容的节点。由于每个节点都是其自己的规范 URL,因此不会显示标签。它仅显示在具有匹配 canonicalUrl 或 canonicalKey 的备用页面上。例如,如果您的 /Home/Training/Home/Environment 操作都提供相同的内容,并且您想指定 /Home/Training 是原始的,/Home/Environment 是副本,您可以像这样配置节点:

    <mvcSiteMapNode title="Training" controller="Home" action="Training" metaRobotsValues="noindex follow"/>
    <mvcSiteMapNode title="Environmental Services" controller="Home" action="Environment" metaRobotsValues="follow" canonicalUrl="/Home/Training"/>
    

    然后您将看到仅为/Home/Environment 页面生成的规范标记,其中包含/Home/Training 页面的绝对URL。

    但是,更易于维护的选项是使用 canonicalKey 而不是 canonicalUrl。这样,如果/Home/Training 上的 URL 发生更改,您不必为将其指定为规范节点的每个节点都更新它。

    <mvcSiteMapNode title="Training" controller="Home" action="Training" metaRobotsValues="noindex follow" key="Home_Training"/>
    <mvcSiteMapNode title="Environmental Services" controller="Home" action="Environment" metaRobotsValues="follow" canonicalKey="Home_Training"/>
    

    CanonicalUrl 可用于您指定非 MVC 托管或网站外部的规范页面。

    【讨论】:

    • 感谢您的详细解答,很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 2014-11-03
    • 2014-03-21
    • 2011-06-14
    相关资源
    最近更新 更多