Google App Engine - Создание SiteMap для социальной сети - PullRequest
1 голос
/ 12 мая 2010

Я создаю социальный инструмент - я хочу позволить поисковым системам подбирать «публичные» профили пользователей - такие как твиттер и фейсбук.

Я видел всю информацию о протоколе в http://www.sitemaps.org, и я понимаю это и как создать такой файл - вместе с индексом, если я превышаю ограничение в 50 КБ.

Где я борюсь, так это концепция того, как я бегу.

Карта сайта для моих общих страниц сайта проста: я могу использовать инструмент для создания файла - или скрипт - разместить файл - отправить файл и готово.

Что мне тогда нужно, так это скрипт, который будет создавать карты сайтов профилей пользователей. Я предполагаю, что это будет что-то вроде:

    <?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>

Я добавил немного ??? так как я не знаю, как мне установить эти настройки для моих профилей, основываясь на следующем: -

Когда создается новый профиль, его необходимо добавить на карту сайта. Если профиль изменился или изменились «определенные» свойства - тогда я не знаю, обновляю ли я запись на карте - или что-то еще? (обновление будет кошмаром!)

Некоторые пользователи могут изменять свой профиль. С точки зрения релевантности поисковой системе, единственный способ поиска профиля пользователей (для моего требования) в Google или Yahoo будет, например, с помощью [имя пользователя] и [местоположение], поэтому после того, как запись для профиля будет добавленная в файл карты единственная причина, по которой поисковый бот переиндексирует профиль, была бы в том случае, если пользователь изменил свое имя пользователя - что он не может. или их местоположение - и или установите их настройки так, чтобы их профиль был «скрыт» от поисковых систем.

Я предполагаю, что создание моей карты должно быть динамичным. Из сказанного выше я могу предположить, что создание нового профиля и возможное редактирование определенных свойств может пометить его как необходимость добавления / обновления в карте сайта.

Предполагая, что у меня будут миллионы профилей, добавленных / редактируемых, как я могу управлять этим разумным способом.

я знаю, что мне нужен скрипт, который может добавлять URL при создании каждого профиля я знаю, что сценарий, вероятно, будет ЗАДАЧЕЙ, работающей с заданной частотой - возможно, профили имеют свойство типа «проиндексировано», и ЗАДАЧА устанавливает их в «true», когда профили добавляются на карту. Я не вижу лучшего способа сохранить карту - я храню ее в хранилище данных, т.е.

model = sitemaps

свойства

key_name = sitemap_xml_1 (и для моей карты sitemap_index_xml)

mapxml = blobstore (необработанная карта XML или карта ROR)

full = boolean (установите значение true, когда счетчик URL равен 50) # это может понадобиться, так как осколок скажет нам

Чтобы заставить это работать, мои мысли

m кэширует текущую структуру карты сайта как "sitemap_xml" вести подсчет количества ссылок когда моя задача выполняется 1. построить структуру xml, скажем, первые 100 URL, помеченные как «index == false» (сколько вы можете запустить за раз?) 2. проверить, заполнен ли текущий файл карты mcache (shardcounter + 100> 50K) 3.a если карта почти заполнена, создайте новую запись карты в моделях "sitemap_xml_2" - обновите файл map_index (также сохраненный в моей модели как "sitemap_index", запустите новый осколок - или выполните сброс.2 3.b, если карта не полная, возьмите ее из mcache 4. Добавьте 100-миллиметровую структуру URL 5. сохранить / м кеш карты

Теперь я могу добавить обработчик, используя URL-карту / маршрут, как / sitemaps / *

Получите мой * как имя карты и обслуживайте карты из магазина / маше на лету.

Теперь мой вопрос: эта работа - это правильный путь или хороший способ начать? Будет ли это справляться с ситуацией, когда поисковые роботы обновляются, когда пользователь меняет свой профиль - возможно, путем правильной установки частоты изменений? - Нужна ли мне более продвинутая система :(? Или я заново изобрел колесо!

Надеюсь, все понятно и имеет смысл: -)

Ответы [ 2 ]

1 голос
/ 13 мая 2010

Частота обновления

Аннулирование кэша - трудная проблема, см .: Инвалидация кэша - есть общее решение?

Насколько я вижу, вам нужно решить, как часто вы хотите поисковых роботов перекраивать ваш сайт, а не как часто вещи действительно меняются; если страница пользователя может содержать информацию, которую он хочет удалить в кратчайшие сроки, то вы хотите, чтобы поисковый робот повторно сканировал ее в течение нескольких дней, даже если профили менялись в среднем редко.

Ведение современной карты

Поскольку скорость вашего веб-сайта теперь указывается в его Google PageRank, стоит обновить статический файл, готовый для показа паукам. Возможно, есть один скрипт, который постоянно обновляет таблицу БД с записями карты сайта, а другой - периодически восстанавливающий статический файл (ы) из таблицы БД. Таким образом, для пауков всегда есть статическая версия, и все это может происходить асинхронно.

Статические страницы в App Engine

Я забыл, что у вас не может быть статических файлов подкачки в App Engine. Согласно этому SO вопросу , лучший способ - это сгенерировать ваш файл и отправить его в memcache. Также см. Документацию по с использованием memcache с App Engine

0 голосов
/ 13 мая 2010

То, что вы описываете, очень похоже на то, как 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

...