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

时间:2014-07-07 18:16:41

标签: python google-app-engine google-cloud-datastore sitemap google-cloud-storage

CONTEXT
假设我的网站包含跨国家,州,城市和地区组织的商店列表。每个商店都有一个动态生成的网页。商店总数最终将达到约150万。我使用NDB来存储商店数据。我计划使用XML站点地图并手动将它们提交给搜索引擎。我使用GAE Python。

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

例如,wwww.example.com/country--state--city--locality--shop_name--unique_index

可以添加,删除商店或者可以更改他们的数据(例如,他们的姓名或城市等)。 我需要设计一个解决方案,帮助我获得最新的站点地图,其中包含所有商店的更新链接。我打算在添加/删除/更新任何商店后尽快提交新的站点地图。

我的方法
方法1
通过查询NDB模型中的信息,即时生成站点地图 方法1的缺点

  1. NDB获取限制为10,000。
  2. 读取免费操作配额50,000。
  3. 前端实例时间的高消耗。
  4. 操作完成时间为60秒。
  5. 方法2
    使用程序(例如X,由我在Perl / Python中编写)在我的笔记本电脑上生成并存储站点地图。每当在我的网站上添加/删除/更新商店时,我都会使用以下助记符更新GCS(Google云端存储)存储文件:

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

    我会将此文件下载并提供给我的本地程序X,以通过更新旧版存储的站点地图文件来生成站点地图。
    方法2的缺点

    • GCS不允许将数据附加到文件中。每次都需要写入整个文件。因此,随着商店数量从0增加到150万,RAM使用率和前端实例小时数将达到峰值。
    • 操作完成时间为60秒。

    方法3
    sitemap.xml文件将包含:

    • 包含基于国家/地区的其他站点地图索引文件的网址的条目。 这些国家/地区站点地图文件将包含State的URL条目 站点地图文件。同样,状态站点地图文件将包含条目 用于城市站点地图文件的URL。同样,城市站点地图文件也会 包含位置站点地图文件的URL条目。地点网站地图 文件将包含商店页面URL的条目。

    • 包含所有静态网页的网址的条目(例如,常见问题解答,关于我们等)。

    方法3的优点

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

    对方法3的怀疑

    • 我可以将所有sitemap.xml文件存储在GCS中吗?你预见到了吗? 这个问题?

    • 是否允许多个级别的站点地图索引文件指向 到其他站点地图索引文件?

    我无法找到一个好的解决方案。我在SO和Nick的博客上看过类似的问题,但是徒劳无功。 如果可能的话,我希望保持在免费配额范围内。 请提供您的建议。

2 个答案:

答案 0 :(得分:2)

我过去使用过以下解决方案:

  • 当需要对网址建立索引时,请使用所需的网址对任务进行排队。
  • 处理任务时,使用网址(以及您需要的任何其他元数据)将站点地图条目实体保存在数据存储区中
  • cron作业将通过迭代站点地图实体触发生成站点地图文件,批量处理大约50K条目(调整以获得最佳结果)。它们存储为文件(blobstore,GCS),可直接提供并由站点地图文件数据存储区实体引用。
  • 您可以根据请求或使用cron作业生成站点地图索引,其中包括每个站点地图文件实体。

这个解决方案的前提是几个警告:

  • Google只会偶尔检查您的站点地图。如果您受到谷歌,bing,抓取工具等的攻击,您可能希望存储站点地图索引或缓存它。
  • 对站点地图的更改不需要是事务性/当前的,因为它没有以这种方式使用。例如,404,301,302等可以在一段时间内使用的URL是重复的。
  • 您可以找到有关如何删除或过期旧站点地图文件实体的机制。您可以使用TTL,或者在每隔几个月完成一次完整重建之前永远不会过期(这非常实用)。

有几个积极因素

  • 您可以将任务排队以删除网址(即删除数据存储条目)
  • 您可以创建管理端点以清除所有内容并根据数据存储状态重新生成。在使用网站管理员工具进行测试或更改网址生成策略等时,这非常有用。
  • 您可以创建管理页面/端点,手动将文件添加到站点地图(或只是推送到队列)
  • 您可以捆绑最后一步不动态的网址,例如隐私权政策,目标网页等。

如上所述,there are limitations on sitemap files表示您希望分解为许多站点地图文件和站点地图索引。这些限制大约是每个文件最多50K条目和10mb文件。鉴于您可能要处理大量数据存储条目,我会优化生成文件(即处理时间和最佳批处理/块大小),而不必担心将每个索引文件填满其极限。

答案 1 :(得分:1)

您可以对站点地图进行分片,因为如果每个Sitemap formats and guidelines超过50,000个网址,您将不得不这样做,并减少您必须为方法2做的重写量,不得不进行更新,说“国家 - 州 - 城市”部分和Sitemap index file