动态网站的站点地图生成方案

1 投票
2 回答
1315 浏览
提问于 2025-04-18 12:23

背景
假设我的网站上有一个商店列表,这些商店按国家、州、市和地区进行分类。每个商店都有一个动态生成的网页。商店的总数最终会达到大约150万。我使用NDB来存储商店数据。我计划使用XML网站地图,并手动提交给搜索引擎。我使用的是GAE Python。

问题
我想要维护(生成并保持更新)网站地图中的所有商店页面的链接。每个商店页面的唯一链接包含以下信息:
国家、州、市、地区、商店名称、唯一索引。

例如,链接格式是:www.example.com/country--state--city--locality--shop_name--unique_index。

商店可能会被添加、删除,或者它们的数据(例如名称或城市等)可能会被更改。我需要设计一个解决方案,帮助我保持最新的网站地图,确保所有商店的链接都是最新的。我打算在任何商店被添加、删除或更新后尽快提交新的网站地图。

我的方法
方法一
通过查询NDB模型中的信息动态生成网站地图。
方法一的缺点

  1. NDB的获取限制为10,000。
  2. 读取操作的免费配额为50,000。
  3. 前端实例的使用时间消耗高。
  4. 操作完成时间为60秒。

方法二
在我的笔记本电脑上使用一个程序(假设是我用Perl/Python写的X)生成并存储网站地图。每当网站上添加/删除/更新商店时,我会更新存储在GCS(Google Cloud Storage)中的文件,文件中包含一些记忆法,比如:

ADD < shop data like name, etc >  
DELETE < shop data like name, etc >  
UPDATE < shop data like name, etc >

我会下载这个文件,并将其输入到我的本地程序X中,通过更新之前存储的网站地图文件来生成新的网站地图。
方法二的缺点

  • GCS不允许在文件中追加数据。每次都需要重新写入整个文件。因此,随着商店数量从0增加到150万,内存使用和前端实例的消耗会达到峰值。
  • 操作完成时间为60秒。

方法三
网站地图文件 sitemap.xml 将包含:

  • 按国家划分的其他网站地图索引文件的URL条目。这些国家网站地图文件将包含州网站地图文件的URL条目。类似地,州网站地图文件将包含城市网站地图文件的URL条目。城市网站地图文件将包含地区网站地图文件的URL条目。地区网站地图文件将包含商店页面的URL条目。

  • 所有静态页面(如常见问题、关于我们等)的URL条目。

方法三的优点

  • 当商店页面被添加/删除/更新时,我只需要更新那个特定的网站地图文件。

方法三的疑问

  • 我可以将所有的 sitemap.xml 文件存储在GCS中吗?你认为这样会有问题吗?

  • 允许有多个级别的网站地图索引文件指向其他网站地图索引文件吗?

我找不到好的解决方案。我在SO和Nick的博客上看到过类似的问题,但都没有找到答案。我希望尽可能保持在免费配额内。请给我一些建议。

2 个回答

1

你可以把网站地图分成几个部分,因为如果每个网站地图的链接超过50,000个,你就必须这样做,这也是符合网站地图格式和指南的要求。这样做可以减少你在第二种方法中需要修改的内容,比如只需要更新“国家--州--城市”这一部分和网站地图索引文件

3

我之前用过以下的解决方案:

  • 当需要索引一个网址时,就把这个网址放到任务队列里。
  • 当这个任务被处理时,就在数据存储中保存一个网站地图的条目,包括网址和其他你需要的元数据。
  • 一个定时任务会生成网站地图文件,它会遍历这些网站地图条目,每次处理大约5万条(可以根据需要调整)。这些文件可以存储在一个文件存储系统中(比如blobstore或GCS),可以直接提供服务,并通过网站地图文件的数据存储条目进行引用。
  • 你可以在需要的时候,或者通过定时任务,生成网站地图索引,这个索引会包含每个网站地图文件的条目。

这个方案有几个注意事项:

  • 谷歌只会偶尔检查你的网站地图。如果你的网站被谷歌、必应等爬虫频繁访问,可能需要存储网站地图索引或者缓存它。
  • 网站地图的变化不需要实时更新,因为它不是以这种方式使用的。例如,404、301、302等网址可以存在一段时间,重复的网址也是可以的。
  • 你可以想办法去删除或过期旧的网站地图条目。可以设置一个过期时间,或者每隔几个月进行一次全面重建(这也是很实用的)。

这个方案有几个优点:

  • 你可以排队一个任务来删除一个网址(也就是删除数据存储中的条目)。
  • 你可以创建一个管理端点来清除所有内容,并根据数据存储的状态重新生成。这在使用网站管理员工具进行测试或改变网址生成策略时非常有用。
  • 你可以创建一个管理页面/端点,手动将文件添加到网站地图中(或者直接推送到队列中)。
  • 在最后一步,你可以将一些不动态的网址打包进来,比如隐私政策、着陆页等。

如前所述,网站地图文件有一些限制,这意味着你需要将它们拆分成多个网站地图文件和一个网站地图索引。这些限制大致是每个文件最多5万条条目,文件大小最多10MB。考虑到你可能会处理很多数据存储条目,我建议你优化文件的生成(也就是处理时间和最佳批量/块大小),而不是担心每个索引文件填满的问题。

撰写回答