58

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

4

5 回答 5

48

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

这是像谷歌这样的搜索引擎可以有效地抓取网站的唯一方法。

Jeff Atwood 在一篇博文中谈到了它站点地图的重要性

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

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

  • 您的网站包含动态内容。
  • 您的网站包含 Googlebot 在抓取过程中不容易发现的页面 - 例如,具有丰富 AJAX 或 Flash 的页面。
  • 您的站点是新站点,并且指向它的链接很少。(Googlebot 通过跟踪从一个页面到另一个页面的链接来抓取网络,因此,如果您的网站没有很好地链接,我们可能很难发现它。)
  • 您的网站有大量内容页面存档,这些页面彼此之间没有很好的链接,或者根本没有链接。
于 2009-07-08T17:20:40.467 回答
15

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

为了减少负载,站点地图可以分成许多站点地图。按天/月对它进行分区可以让您告诉 Google 经常检索今天的站点地图,但只偶尔从六个月前获取站点地图。

于 2009-07-08T17:20:37.533 回答
5

我想在这里分享我的解决方案,以防万一它对某人也有帮助。我花了我阅读这个问题和许多其他人来决定要做什么。

我的网站结构。

静态页面

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

...ETC

动态页面

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

我的做法。

sitemap.xml:此 url 生成<sitemapindex />第一项为/sitemap-main.xml. Artists,Albums等的数量Songs被计算并除以 1,000(我想要在每个站点地图中的 url 数量。限制为 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) {...

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

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

于 2016-01-09T21:08:43.090 回答
2

即使在 StackOverflow 之类的东西上,也有一定数量的静态组织;有FAQ、标签页、问题页、用户页、徽章页等;我想说在一个非常动态的站点中,处理站点地图的最佳方法是拥有分类地图;站点地图中的每个节点都可以指向动态生成数据的一个页面(一个节点用于问题页面,一个节点用于用户页面等)。

当然,站点地图甚至可能不适合给定站点。那里需要一定数量的判断。

于 2009-07-08T17:20:26.693 回答
1

对于一个高度动态的站点,我在我的服务器上编写了一个每天运行的 cron 作业。它每天对我的后端进行一次休息调用,并根据所有新生成的内容生成一个新的站点地图,并将站点地图以 xml 文件的形式返回。这个新的站点地图会覆盖以前的站点地图,并根据所有更改保持我的网站更新。我认为为每个新添加的动态内容更改站点地图不是一个好方法

于 2016-11-08T08:09:31.220 回答