不断生成新网页的高度动态网站是否应使用sitemap?如果是这样,像stackoverflow.com这样的网站如何重建站点地图?如果每次有人添加问题时不断重新生成站点地图,这似乎会耗尽宝贵的服务器资源。它是否按照设定的时间间隔(例如每四个小时)生成一个新的站点地图?我非常好奇大型动态网站如何使这项工作。
答案 0 :(得分:41)
在Stackoverflow(以及所有Stack Exchange站点)上,创建一个sitemap.xml文件,其中包含指向系统上发布的每个问题的链接。发布新问题时,他们只需将另一个条目附加到站点地图文件的末尾。添加到文件末尾并不是资源密集,但文件非常大。
这是Google等搜索引擎可以有效抓取网站的唯一方式。
Jeff Atwood在博文中谈到这个问题:The Importance of Sitemaps
这是Google's webmaster help page on sitemaps:
在以下情况下,站点地图特别有用:
- 您的网站包含动态内容。
- 您的网站包含Googlebot在此期间无法轻易发现的网页 抓取过程 - 例如,页面 具有丰富的AJAX或Flash。
- 您的网站是新网站,并且几乎没有链接。 (Googlebot抓取网络 以下链接从一页到 另一个,所以如果你的网站不好 相关联,我们可能很难 发现它。)
- 您的网站有一个大型的内容页面存档,但没有很好地链接 相互之间,或者没有联系在一起 所有
答案 1 :(得分:13)
每次发布问题时都无需重新生成Google站点地图XML。只需直接从数据库按需生成XML文件(以及一点缓存)就更简单了。
为减少负载,可以将站点地图拆分为多个站点地图。按日/月对其进行分区可让您告诉Google经常检索今天的站点地图,但只会在六个月前暂时取回站点地图。
答案 2 :(得分:4)
我想在这里分享我的解决方案,以防万一它也能帮助别人。 我花了这个问题和许多其他人来决定该怎么做。
我的网站结构。
静态页面
...等
动态页面
我的方法。
sitemap.xml :此网址生成<sitemapindex />
,第一项为/sitemap-main.xml
。 Artists
,Albums
,Songs
等的数量将被计算并除以1,000(每个站点地图中我想要的网址数量。限制为50,000)。我绕过这个数字。
因此,例如,1900首歌曲= 1.9 = 2。
我生成。将网址/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语句来生成相关文件。如果对于这个页面,我有1000个项目,上面指定的限制,我将文件缓存2周。 另外,我只将它缓存几个小时。
我想这可以帮助其他人实现他们自己的系统。
答案 3 :(得分:2)
即使像StackOverflow这样的东西,也有一定数量的静态组织;有常见问题,标签页,问题页,用户页,徽章页等;我要说的是,在一个非常动态的网站中,接近站点地图的最佳方式是拥有分类的地图;站点地图中的每个节点都可以指向动态生成数据的页面(问题页面的节点,用户页面的节点等)。
当然,站点地图可能甚至不适合给定的站点;那里需要一定数量的判断。
答案 4 :(得分:0)
对于一个高度动态的网站,我在我的服务器上写了一个cron作业,每天运行。它每天都会对我的后端进行休息调用,并根据所有新生成的内容生成新的站点地图,并以xml文件的形式返回站点地图。这个新的站点地图会覆盖前一个站点地图,并根据所有更改保持我的网站更新。更改每个新添加的动态内容的站点地图不是一个好的方法我认为
答案 5 :(得分:-1)
我只会为网站的更多静态页面创建站点地图。例如,在StackOverflow上,站点地图可以显示常见问题解答,关于,问题,标签,用户等页面的链接,但不显示实际问题或所有标签以及各种用户的链接。