【问题标题】:Updateable Google Sitemap for ASP.NET 3.5 Web App Project用于 ASP.NET 3.5 Web 应用项目的可更新 Google 站点地图
【发布时间】:2010-01-26 07:00:11
【问题描述】:

我正在使用 C# 编写一个 ASP.NET 3.5 Web 应用程序项目。我手动添加了一个 Google 友好的站点地图,其中包含项目中每个页面的条目 - 这不是 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>

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

特别是,我正在使用 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 将分页界面呈现为一系列超链接,爬虫可以跟踪和索引这些超链接。但是,如果 Google 在两天前抓取了我的事件列表,而与此同时,管理员又添加了十几个事件……比如说页面大小设置为 6;在这种情况下,Google SERP 链接现在将指向错误的页面。这就是为什么我需要确保站点地图在事件页面发生更改时立即反映它们。

我已经查看了其他 SO 问题的信息,但没有找到我需要的东西。谁能提供一些指导或替代方法?

更新:

由于这是一个共享托管环境,目录观察程序/服务将不起作用:

How to create file watcher in shared webhosting environment

更新:

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

【问题讨论】:

    标签: asp.net listview asp.net-2.0 asp.net-3.5 sitemap


    【解决方案1】:

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

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

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

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

    另外,请注意确保过去一小时内没有 ping(因为 Google 指南不建议每小时 ping 一次以上)。

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

    【讨论】:

    • 反应很好。我有一个审核系统,管理员必须设置一个复选框才能使活动生效,因此将在那里调用该方法。 +1 用于提醒每小时的事情;可以感觉到额外的桌子即将到来:-O
    • 正如承诺的那样,我已将其集成到 Cyclemania 中。目前 ping 方法是通过管理工具手动调用的(当然也可以从其他方法调用)。该实现还具有记录到数据库表的功​​能(正如您所提到的)和 60 分钟的 ping 延迟(可配置)。数据分层有点快和脏,现在使用 ADO。 ;) 请注意 robots.txt 文件,因为那里也引用了站点地图。 Google 现在可以从 robots.txt 中获取站点地图位置。
    【解决方案2】:

    如果您让您的用户向网站添加事件,您可能正在使用数据库。 这意味着您可以像这样在运行时生成 XML-Sitemap:

    • 创建一个可以使用站点地图的页面(这不需要是 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)

    【讨论】:

    • +1 因为你也“有钱”。为什么它不需要完全是“Sitemap.xml”需要进一步澄清,因为我认为这是 Google 所期望的?
    • 不,这不是谷歌默认的期望。有几种方法可以将站点地图分配给搜索引擎。您可以在站点地图协议网站上找到更多信息:sitemaps.org/protocol.php#informing
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多