【问题标题】:Google App Engine - SiteMap Creation for a social networkGoogle App Engine - 为社交网络创建站点地图
【发布时间】:2011-02-18 15:18:07
【问题描述】:

我正在创建一个社交工具 - 我希望允许搜索引擎获取“公共”用户资料 - 例如 twitter 和 facebook。

我已经在http://www.sitemaps.org 看到了所有协议信息,并且我了解这一点以及如何构建这样的文件 - 如果我超过 50K 限制,还会提供索引。

我苦苦挣扎的地方是我如何运行的概念。

我的一般站点页面的站点地图很简单,我可以使用工具来创建文件 - 或脚本 - 托管文件 - 提交文件并完成。

然后我需要一个脚本来创建用户配置文件的站点地图。我认为这会是这样的:

    <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://www.socialsite.com/profile/spidee</loc>
      <lastmod>2010-5-12</lastmod>
      <changefreq>???</changefreq>
      <priority>???</priority>
   </url>
   <url>
      <loc>http://www.socialsite.com/profile/webbsterisback</loc>
      <lastmod>2010-5-12</lastmod>
      <changefreq>???</changefreq>
      <priority>???</priority>
   </url>
</urlset>

我添加了一些???因为我不知道如何根据以下内容为我的个人资料设置这些设置:-

创建新配置文件时,必须将其添加到站点地图中。如果配置文件被更改或“某些”属性被更改 - 那么我不知道我是否更新了地图中的条目 - 还是做其他事情? (更新将是一场噩梦!)

一些用户可能会更改他们的个人资料。就与搜索引擎的相关性而言,谷歌或雅虎搜索找到用户(根据我的要求)配置文件的唯一方法是例如通过 [用户名] 和 [位置],因此一旦配置文件的条目被添加到地图文件中,让搜索机器人重新索引配置文件的唯一原因是如果用户更改了他们的用户名 - 他们不能。或他们的位置 - 和/或设置他们的设置,以便他们的个人资料对搜索引擎“隐藏”。

我假设我的地图创建需要是动态的。根据我上面所说的,我可以想象创建一个新的配置文件并可能编辑某些属性可能会将其标记为需要在站点地图中添加/更新。

假设我将添加/编辑数百万个配置文件,我该如何以合理的方式进行管理。

我知道我需要一个可以在创建每个配置文件时附加 url 的脚本 我知道脚本很可能是一个任务 - 以设定的频率运行 - 也许配置文件具有“索引”之类的属性,并且当配置文件添加到地图时,TASK 将它们设置为“真”。 我没有看到存储地图的最佳方式 - 我是否将其存储在数据存储中,即;

模型=站点地图

属性

key_name=sitemap_xml_1(以及我的地图 sitemap_index_xml)

mapxml=blobstore(原始 xml 映射或 ror 映射)

full=boolean (当 url count 为 50 时设置为 true) # 可能需要这个,因为分片会告诉我们

为了完成这项工作,我的想法是

m 将当前站点地图结构缓存为“sitemap_xml” 保留一个 url 计数的碎片 当我的任务执行时 1. 为标记为“index==false”的前 100 个 url 构建 xml 结构(一次可以运行多少个?) 2.测试当前mcache站点地图是否已满(shardcounter+100>50K) 3.a 如果地图快满了,在模型“sitemap_xml_2”中创建一个新的地图条目 - 更新 map_index 文件(也存储在我的模型中作为“sitemap_index”启动一个新的分片 - 或 reset.2 3.b 如果地图未满,请从 mcache 中抓取 4.追加100 url xml结构 5.save/m缓存地图

我现在可以使用 /sitemaps/* 之类的 url 映射/路由添加处理程序

获取我的 * 作为地图名称并即时从 blobstore/mache 提供地图。

现在我的问题是这行得通吗?这是正确的方法还是好的开始方法?这是否会处理确保搜索机器人在用户更改其个人资料时更新的情况 - 可能通过正确设置更改频率? - 我需要更先进的系统吗:(?还是我重新发明了轮子!

我希望这一切都清楚并具有某种意义:-)

【问题讨论】:

    标签: google-app-engine sitemap


    【解决方案1】:

    更新频率

    缓存失效是个难题,见:Cache Invalidation - Is there a General Solution?

    据我所知,您需要决定希望搜索机器人重新抓取您的网站的频率,而不是实际更改的频率;如果用户的页面可能包含他们想要在短时间内删除的信息,那么您希望搜索机器人在几天内重新抓取,即使个人资料平均很少更改。

    保持最新的地图

    由于您网站的速度现在在其 Google PageRank 中有所体现,因此值得更新一个准备好为蜘蛛提供服务的静态文件。也许有一个脚本会不断更新带有站点地图条目的数据库表,而另一个脚本会定期从数据库表重新生成静态文件。这样一来,蜘蛛总是有一个可用的静态版本,而且这一切都可以异步发生。

    App Engine 上的静态页面

    我忘记了 App Engine 上不能有静态页面文件。根据this SO question,最好的方法是使用生成文件并将其推送到内存缓存。另请参阅using memcache with App Engine 上的文档

    【讨论】:

    • 我是否正确地说,在应用程序引擎上,提供从 db 文件动态构建的所谓“静态文件”的唯一方法是将动态页面存储在 db 中,然后简单地通过处理程序提供该内容 - 在应用引擎上无法创建和保存静态文件?
    • @spidee GAE 不提供文件访问权限,因此您可以将文件内容存储在数据库(数据存储区/blob)中和/或通过 memcache 直接从内存/RAM 提供。
    【解决方案2】:

    您所描述的与 Django 实现站点地图框架的方式非常相似:http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/ 特别是关于创建索引文件的部分:http://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/#creating-a-sitemap-index

    如果你想在 AppEngine 上看到它的补丁版本,你可以看这里:http://code.google.com/p/dherbst-app-engine-django/wiki/Sitemaps

    这些是应用于帮助程序的更改:http://code.google.com/p/dherbst-app-engine-django/source/detail?r=509403105ec97fb1f3dfeadfada808f2cf1ff9a7

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2015-03-24
      • 2013-11-15
      相关资源
      最近更新 更多