Google App Engine - 社交网络的SiteMap创建

时间:2010-05-12 13:28:56

标签: google-app-engine sitemap

我正在创建一个社交工具 - 我希望允许搜索引擎选择“公共”用户配置文件 - 例如twitter和face-book。

我已经在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>

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

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

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

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

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

我知道我需要一个可以在创建每个配置文件时附加网址的脚本 我知道脚本可能是一个任务 - 在设定的频率下运行 - 也许配置文件有一个属性,如“索引”,当配置文件添加到地图时,TASK将它们设置为“true”。 我没有看到存储地图的最佳方式 - 我将它存储在数据存储区中,即

model = sitemaps

属性

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

mapxml = blobstore(原始xml地图或ror地图)

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

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

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

我现在可以使用url map / route添加处理程序,例如/ sitemaps / *

获取我的*作为地图名称并动态提供blobstore / mache中的地图。

现在我的问题是这项工作 - 这是正确的方式还是一种好的开始方式?这将处理确保搜索机器人在用户更改其配置文件时更新的情况 - 可能通过正确设置更改频率? - 我需要一个更先进的系统:(?或者我重新发明了轮子!

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

2 个答案:

答案 0 :(得分:1)

更新频率

缓存失效是一个难题,请参阅:Cache Invalidation - Is there a General Solution?

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

保持最新地图

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

App Engine上的静态页面

我忘了您在App Engine上没有静态页面文件。根据{{​​3}},最好的方法是使用生成文件并将其推送到memcache。另请参阅this SO question

上的文档

答案 1 :(得分:0)

您所描述的内容与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