ASP.NET站点地图,有多重要?

时间:2015-03-03 12:45:51

标签: c# asp.net webforms sitemap

我已经完成了我的网站,或者我认为。我没有站点地图,有些奇迹我错过了站点地图的整个概念,甚至不知道这是一件事。我想对我的CS老师大吼一声。

我一直在阅读它并且动态生成站点地图似乎相当复杂,我必须这样做,因为我的页面基本上只是一个使用参数搜索的大型数据库。

这对Google搜索引擎的相关性有多重要?例如,如果有人在Google上搜索我的网站"www.mySite.com food"。如果我的数据库中有一个名为"food"的类别,如果有人在我的网站上使用搜索,他们会找到一个食品类别,但Google会知道吗? Google会找到"www.mySite.com/Find?Result=food"吗?

编辑:使用可以在ASP.NET中创建的Web.Sitemap或者我应该使用名为sitemap.txt的文件是否正确?

2 个答案:

答案 0 :(得分:3)

网站地图类型

有3种不同的"网站地图"。

  1. 在其上有链接的页面,通过为用户提供网站结构的完整大纲来帮助用户。这有时(但不总是)遵循站点层次结构。此外,它通常仅限于网站的主要类别。通常不会列出详细信息页面。
  2. ASP.NET中的一个系统,可帮助构建网站的菜单,痕迹路径和其他导航功能。这是由默认使用.sitemap XML文件的提供程序驱动的。
  3. 一个XML文档,提供指向网站页面的链接,以及有关上次更新页面的时间,更新的重要性等信息,以协助在搜索引擎中对网站编制索引。
  4. 简史

    如果你查看历史记录,它会使解析这些信息变得更加混乱。以上列表按时间顺序排列。 "网站地图"是一个最初用于提供链接到网站主要部分的用户页面的术语。微软决定再次使用术语"站点地图"引用他们的ASP.NET 2.0导航系统。几年后,主要搜索引擎合作提供了一个XML规范,用于提供有关网站的URL信息,不幸的是,它们超载了术语“网站地图”。再次描述它们。

    此历史记录的后果之一是ASP.NET 没有对XML站点地图的内置支持,这听起来就像您尝试根据您的问题制作的那样。这主要是因为自ASP.NET 2.0以来,Microsoft的实现并未发生太多变化,而且在该规范实现之前就已经编写过了。因此,使用Microsoft的ASP.NET导航系统对于生成XML站点地图没有任何帮助。

    SEO注意事项

    请注意,这些项目的所有3个对SEO都很重要。

    1. 用户站点地图有助于搜索引擎索引,因为它提供了指向需要编制索引的主要区域的内部站点链接。
    2. 菜单和面包屑路径对于将所有内容页面相互链接非常重要,这有助于确定网站不同部分之间的相关性。
    3. XML站点地图为搜索引擎提供直接的网址信息,有助于减少网站上的搜索引擎流量,并有助于确保搜索引擎无法考虑索引的重要网址。
    4. 所以你可能想要考虑每一个,尽管严格来说所有这些都是可选的。

      SEO首先要提供好的内容,然后执行必要的步骤以便可以访问内容。以上每一项都应该被认为是搜索引擎优化的一个进步,如果你真的关心搜索引擎的位置,你应该尽一切可能,包括所有这三个步骤。

      XML站点地图建议

      实际上,对于50,000页以下的小型网站,XML sitemap specification非常简单。因此,将它们组合在一起并不需要花费太多精力。你可能想考虑自己这样做。

      大多数开源实现的扩展性不是很高,因为它们都会将整个数据集一次加载到内存中以生成XML而不是流式传输。此外,他们中的大多数人并没有真正解释这样一个事实,即您可能在多个表格中都有动态数据,这些数据都会影响网站的网址。他们通常会让您提供分页。大多数现有实现也不提供Google提供的specialized content types

      我最近创建了an implementation来完成所有这些事情。它尚未正式发布,它目前是MvcSiteMapProvider项目的一部分。我们计划将XML站点地图功能分离到不同的程序集(和单独的NuGet包)中,因此可以在不引用MVC的情况下使用它,但是现在要求MVC(除非您想要获取所有相关类型并编译它们)自己进入一个单独的DLL)。一个带有MVC的ASP.NET项目仍然运行得很好,所以对于大多数项目来说这不是一个大问题。

      目前还没有任何文档,但我创建了一个quick post,展示了如何在MVC中连接它,包括演示应用程序。

      对于ASP.NET,您可以使用MVC实现(如果您安装了MvcSiteMapProvider,它会将MVC安装到您的项目中),或者您可以只使用ASP.NET页面。

      在第二种情况下,配置看起来类似,只有少数例外。

      1. 您不需要使用XmlSitemapFeedRouteRegistrar课程。
      2. 您(当然)不需要使用Controller,您可以将其替换为ASP.NET页面,如下所示:
      3. <强> XmlSitemap.aspx

        <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XmlSitemap.aspx.cs" Inherits="XmlSitemap" %>
        

        <强> XmlSitemap.aspx.cs

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.UI;
        using System.Web.UI.WebControls;
        using MvcSiteMapProvider.IO;
        using MvcSiteMapProvider.Xml.Sitemap;
        using MvcSiteMapProvider.Xml.Sitemap.Configuration;
        
        public partial class XmlSitemap : System.Web.UI.Page
        {
            private HttpContextBase HttpContext
            {
                get { return new HttpContextWrapper(System.Web.HttpContext.Current); }
            }
        
            private int PageNumber
            {
                get
                {
                    var pageString = HttpContext.Request.QueryString["page"];
                    if (!string.IsNullOrEmpty(pageString))
                    {
                        int page;
                        if (int.TryParse(pageString, out page))
                        {
                            return page;
                        }
                    }
                    return 0;
                }
            }
        
            private string FeedName
            {
                get
                {
                    var feedName = HttpContext.Request.QueryString["feedName"];
                    if (!string.IsNullOrEmpty(feedName))
                    {
                        return feedName;
                    }
                    return "default";
                }
            }
        
            protected void Page_Load(object sender, EventArgs e)
            {
                // Build feeds for XML sitemap
                var xmlSitemapFeedStrategy = new XmlSitemapFeedStrategyBuilder()
                    .SetupPageNameTempates(templates => templates
                        .WithDefaultFeedRoot("XmlSitemap.aspx?feedName={feedName}&page={page}")
                        .WithDefaultFeedPaged("XmlSitemap.aspx?feedName={feedName}&page={page}")
                        .WithNamedFeedRoot("XmlSitemap.aspx?feedName={feedName}&page={page}")
                        .WithNamedFeedPaged("XmlSitemap.aspx?feedName={feedName}&page={page}"))
                    .AddDefaultFeed()
                    .AddNamedFeed("google", feed => feed.WithContent(c => c.Image().Video()))
        
                    // Optional - add news feed (will be at ~/XmlSitemap.aspx?feedName=news)
                    .AddNamedFeed("news", feed => feed.WithContent(c => c.News()))
        
                    // Optional - add mobile feed (will be at ~/XmlSitemap.aspx?feedName=mobile)
                    .AddNamedFeed("mobile", feed => feed.WithContent(c => c.Mobile()).WithMaximumPageSize(10000))
                    .Create();
        
                var xmlSitemapFeed = xmlSitemapFeedStrategy.GetFeed(this.FeedName);
        
                if (xmlSitemapFeed != null)
                {
                    var outputCompressor = new HttpResponseStreamCompressor();
                    var response = HttpContext.Response;
        
                    response.Clear();
        
                    // Output content type
                    response.ContentType = "text/xml";
        
                    using (var stream = outputCompressor.Compress(HttpContext))
                    {
                        if (!xmlSitemapFeed.WritePage(this.PageNumber, stream))
                        {
                            response.Clear();
                            //Return 404 not found
                            response.StatusCode = (int)System.Net.HttpStatusCode.NotFound;
                            response.StatusDescription = "Page Not Found";
                        }
                    }
        
                    response.End();
                }
            }
        }
        

        上述配置实际上创建了4种不同的XML站点地图源,主要是为了遵守这些专用类型的规范。

        1. 默认 - /XmlSitemap.aspx - 可以与任何搜索引擎一起使用的站点地图。根据{{​​3}}。
        2. ,此网址必须位于robots.txt文件中
        3. Google - /XmlSitemap.aspx?feedName=google - 此站点地图包含默认的相同网址,但它还包含图片和视频专用内容。如果错误编码的抓取工具遇到任何Google的专用类型,可能会崩溃,我将它们分成不同的Feed。您需要通过网站管理员工具手动将此网址提交给Google。
        4. 新闻 - /XmlSitemap.aspx?feedName=news - 这是Google的新闻站点地图功能,需要提交XML sitemap specification
        5. 移动版 - /XmlSitemap.aspx?feedname=mobile - 这适用于Googles移动版网站地图功能,需要提交per their specifications
        6. 请注意,也可以在ASP.NET中使用路由来使这些URL更好。您只需确保指定名称模板的方式与路由生成URL的方式相同,将{feedName}{page}的占位符放在URL中的适当位置。

          请注意,根据XML站点地图规范,XML站点地图不能包含其虚拟目录上方的目录的任何URL。因此,最好确保您的路由不包含任何/个字符(意味着它适用于整个网站,而不是子目录)。

答案 1 :(得分:1)

首先,没有。 asp.net站点地图不是你真正用于谷歌的东西。这更多是出于提供信息的目的。大多数搜索引擎都会接受一个站点地图文件,以便更好地了解您的网站。有很多免费和付费服务可以为您生成。只是Google&#34;网站地图生成器&#34;而且你会发现种类繁多。这些将占用您的网站,查找链接,组织它们,并为主要搜索引擎提供XML站点地图中的文件。

谷歌不会去寻找类别,所以除非你在某个地方链接它,否则它不会知道食物。你可能还想看看使用url重写而不是querystring变量,因为它改善了SEO。你的网址是: www.mysite.com/Find/Food,看起来对搜索引擎更友好。

简而言之,asp.net站点地图很不错,但打算被其他数据组件用来为用户创建菜单或可视化站点地图等内容,而不是搜索引擎使用的站点地图定义文件。