高度动态网站上的站点地图

And*_*son 42 sitemap

一个不断生成新页面的高度动态网站是否应该使用站点地图?如果是这样,像stackoverflow.com这样的网站如何重建站点地图?如果每次有人添加问题时不断重新生成站点地图,这似乎会耗尽宝贵的服务器资源.它是否以设定的间隔(例如每四个小时)生成一个新的站点地图?我非常好奇大型动态网站是如何实现这一目标的.

Rob*_*ino 43

在Stackoverflow(以及所有Stack Exchange站点)上,创建一个sitemap.xml文件,其中包含指向系统上发布的每个问题的链接.发布新问题时,他们只需将另一个条目附加到站点地图文件的末尾.添加到文件末尾并不是资源密集,但文件非常大.

这是Google等搜索引擎有效抓取网站的唯一方式.

杰夫阿特伍德在一篇博文中谈到了这一点:Sitemaps的重要性

这是来自Google站点地图上的网站管理员帮助页面:

在以下情况下,站点地图特别有用:

  • 您的网站包含动态内容.
  • 您的网站包含Googlebot在抓取过程中无法轻易发现的网页 - 例如,包含丰富的AJAX或Flash的网页.
  • 您的网站是新的,并且几乎没有链接.(Googlebot通过跟踪从一个页面到另一个页面的链接来抓取网络,因此如果您的网站链接不好,我们可能很难发现它.)
  • 您的网站有一个大型的内容页面存档,这些内容页面彼此之间没有很好的链接,或根本没有链接.

  • 当用户删除问题时怎么办?他们有没有时间重新生成整个站点地图? (5认同)
  • 只要您的网站在该问题上返回404,就无需更新删除.Google会忽略404并将其从索引中删除,因此不会造成任何伤害. (4认同)
  • @average - 如果您欺骗Googlebot用户代理,它就会显示出来.他们阻止普通浏览器. (4认同)
  • 这是否意味着SO的站点地图项目不会更新lastmod字段?搜索引擎如何知道何时重新索引问题页面? (2认同)
  • 这很有趣,现在我想起来了,我实际上曾经读过一篇关于编码错误的文章,但我完全忘记了它.我必须在早晨咖啡之前阅读它.... (2认同)

cee*_*yoz 13

每次发布问题时都无需重新生成Google站点地图XML.只需直接从数据库(和一点缓存)按需生成XML文件就简单得多了.

为减少负载,可以将站点地图拆分为多个站点地图.按日/月分区可让您告诉Google经常检索今天的站点地图,但只会在六个月前偶尔获取站点地图.

  • 这是一个很好的答案.我会接受它,但罗伯特的格式更漂亮,有闪亮的超链接和报价框! (11认同)
  • 它隐含在这个问题中.没有"大型,动态的网站"会将发布到其中的每个问题添加到用户可访问的站点地图中. (5认同)
  • 为什么没有站点地图了?是谷歌更聪明,还是开发者设计的网站更好,还是其他原因?发生了什么变化? (2认同)

fro*_*ous 5

我想在这里分享我的解决方案,以防它也对某人有所帮助。我阅读了这个问题和许多其他问题后才决定该怎么做。

我的网站结构。

静态页面

  • 首页(高度动态。缓存 30 分钟)
  • 艺术家、专辑、歌曲、播放列表和专辑(分页列表)
  • 法律(包含条款等的静态页面)

...ETC

动态页面

  • 艺术家、专辑、歌曲、播放列表和专辑详细信息页面

我的方法。

sitemap.xml:此 url 生成<sitemapindex />第一项为 的/sitemap-main.xml. ArtistsAlbums等的数量Songs被计算并除以 1,000(我想要在每个站点地图中的网址数量。限制为 50,000)。我把这个数字四舍五入。

例如,1900 首歌曲 = 1.9 = 2。我生成。将 url/sitemap-songs-0.xml和添加/sitemap-songs-1.xml到索引中。我对所有其他项目重复这一点。基本上,我正在分页。

返回的输出未缓存。我希望这个永远新鲜。


sitemap-main.xml:这列出了所有静态页面。实际上,您可以为此使用静态文件,因为您只需要偶尔更新一次。


sitemap-songs-0.xml、sitemap-albums-0.xml 等:我在 SlimPhp 2 中使用单个路由。

$app->get('/sitemap-:type-:page.xml', function ($type, $page) use ($app) {...
Run Code Online (Sandbox Code Playgroud)

我使用一个简单的 switch 语句来生成相关文件。如果对于此页面,我有 1,000 个项目,即上面指定的限制,我会将文件缓存 2 周。否则,我只会缓存几个小时。

我想这可以帮助其他人实现他们自己的系统。