代码之家  ›  专栏  ›  技术社区  ›  IrishChieftain

可更新的Google网站地图,用于ASP.NET 3.5 Web应用程序项目

  •  2
  • IrishChieftain  · 技术社区  · 15 年前

    我正在用C语言编写一个ASP.NET 3.5 Web应用程序项目。我手动添加了一个谷歌友好网站地图,其中包括项目中每个页面的条目-这不是CMS。

      <url>
        <loc>http://www.mysite.com/events.aspx</loc>
        <lastmod>2009-11-17T20:45:46Z</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
      </url>
    

    客户端使用管理后端更新事件。除此之外,网站是相对静态的。我正在尝试确定更新少数定期更新的页面的<lastmod>值的最佳方法。

    特别是,我使用ListView控件的queryStringField来增强seo,如下所述:

    http://www.4guysfromrolla.com/articles/010610-1.aspx

    http://gsej.wordpress.com/2009/05/31/using-a-datapager-with-both-a-querystringfield-and-renderdisabledbuttonsaslabels/

    设置QueryStringField属性后,DataPager将分页接口呈现为一系列超链接,爬虫程序可以跟踪这些超链接并对其进行索引。但是,如果谷歌两天前已经对我的事件列表进行了爬行,同时,管理员又添加了十几个事件…假设页面大小设置为6;在这种情况下,google serp链接现在将指向错误的页面。这就是为什么我需要确保站点地图在事件页面发生更改时立即反映这些更改的原因。

    我已经查过了其他的问题,没有找到我需要的信息。有人能提供一些指导或其他方法吗?

    更新:

    由于这是一个共享的托管环境,目录观察程序/服务将无法工作:

    How to create file watcher in shared webhosting environment

    更新:

    开始意识到我可能需要向Google表明包含页面已经更新;是否更新最后修改的HTTP头?

    2 回复  |  直到 14 年前
        1
  •  1
  •   MissingLinq    15 年前

    不要使用手工编码的站点地图,而是创建一个将动态生成站点地图的站点地图处理程序。您可以在处理程序中创建一个方法,该方法将从现有导航站点地图、数据库甚至硬编码的页面列表中获取页面。您可以从列表中创建一个XML文档,并将文档的innerXML写入处理程序响应流。

    然后,用一个方法创建一个类,该方法将使用上面处理程序的URL自动ping搜索引擎(如 http://www.google.com/webmasters/tools/ping?sitemap=http://www.mysite.com/sitemap.ashx )

    当有人添加新事件时,调用上面的方法。这将使用您最新的站点地图(由上述方法新生成)对Google进行ping。

    您要确保ping仅在站点地图实际已更新时有效。您可以在addNewEvent处理程序的events.aspx上使用file.setLastWriteTime来表示包含的页面已更新。

    另外,要小心确保在最后一个小时内没有ping(因为谷歌的指导方针不鼓励ping每小时超过一次)。

    我计划在下面的OSS项目中实现: http://cyclemania.codeplex.com . 完成后我会通知你,你可以看看。

        2
  •  1
  •   dampee    15 年前

    如果您允许您的用户向网站添加事件,您可能正在使用数据库。 这意味着您可以在运行时生成XML站点地图,如下所示:

    • 创建一个站点地图可用的页面(这不需要是sitemap.xml,也可以是sitemap.aspx,甚至是sitemap.ashx)。
    • 打开数据库连接
    • 遍历所有记录并为每个记录创建一个XML元素

    这篇博客文章将进一步帮助您: Build a Search Engine SiteMap in C# . 它没有使用来自.NET 3.5的新Xelements,但它会很好地工作。

    您可以将它放在ASPX页面中,但是添加一个httphandler可能比在同一个博客上描述的更好,不同的帖子:( creating a httphandler for a sitemap )