Обновляемая карта сайта Google для проекта веб-приложения ASP.NET 3.5

Я работаю над проектом веб-приложения ASP.NET 3.5 на C #. Я вручную добавил удобную для Google карту сайта, которая включает записи для каждой страницы в проекте - это не CMS.

  <url>
    <loc>http://www.mysite.com/events.aspx</loc>
    <lastmod>2009-11-17T20:45:46Z</lastmod>
    <changefreq>daily</changefreq>
    <priority>0.8</priority>
  </url>

Клиент обновляет события, используя серверную часть администратора. В остальном сайт относительно статичен. Я пытаюсь решить, как лучше всего обновить значения ‹lastmod› для нескольких страниц, которые регулярно обновляются.

В частности, я использую QueryStringField элемента управления ListView для улучшения SEO, как описано здесь:

http://www.4guysfromrolla.com/articles/010610-1.aspx

http://gsej.wordpress.com/2009/05/31/using-a-datapager-with-both-a-querystringfield-and-renderdisabledbuttonsaslabels/

Если задано свойство QueryStringField, DataPager отображает интерфейс разбиения на страницы как серию гиперссылок, по которым поисковый робот может переходить и индексировать. Однако, если Google просканировал мой список событий два дня назад, а тем временем администратор добавил еще дюжину событий ... скажем, размер страницы установлен на 6; в этом случае ссылки поисковой выдачи Google теперь будут указывать не на те страницы. Вот почему мне нужно быть уверенным, что карта сайта отражает изменения на странице событий, как только они происходят.

Я уже просмотрел другие вопросы SO для информации и не нашел то, что мне нужно. Может ли кто-нибудь предложить руководство или альтернативный подход?

ОБНОВЛЕНИЕ:

Поскольку это среда общего хостинга, наблюдатель / служба каталогов не будет работать:

Как создать наблюдатель файлов в общей среде веб-хостинга

ОБНОВЛЕНИЕ:

Начиная понимать, что мне может потребоваться сообщить Google, что содержащаяся страница была обновлена; обновить последний измененный HTTP-заголовок?


person IrishChieftain    schedule 26.01.2010    source источник


Ответы (2)


Вместо того, чтобы использовать вручную закодированную карту сайта, создайте обработчик карты сайта, который будет генерировать карту сайта на лету. Вы можете создать в обработчике метод, который будет захватывать страницы из существующей карты сайта для навигации, из базы данных или даже из жестко запрограммированного списка страниц. Вы можете создать XmlDocument из списка и записать InnerXml документа в поток ответа обработчика.

Затем создайте класс с методом, который будет автоматически пинговать поисковые системы с указанным выше URL-адресом обработчика (например, http://www.google.com/webmasters/tools/ping?sitemap=http://www.mysite.com/sitemap.ashx ).

Каждый раз, когда кто-то добавляет новое событие, вызовите указанный выше метод. Это будет проверять связь с Google с использованием вашей последней карты сайта (только что созданной указанным выше методом).

Вы хотите убедиться, что пинг работает только в том случае, если карта сайта действительно была обновлена. Вы можете использовать File.SetLastWriteTime для events.aspx в обработчике AddNewEvent, чтобы указать, что содержащаяся страница была обновлена.

Кроме того, будьте осторожны, чтобы убедиться, что в течение последнего часа не было пингов (так как рекомендации Google не рекомендуют пинговать чаще одного раза в час).

На самом деле я планирую реализовать это в следующем проекте OSS: http://cyclemania.codeplex.com. Я дам вам знать, как только это будет сделано, и вы сможете посмотреть.

person MissingLinq    schedule 30.01.2010
comment
Отличный ответ. У меня есть система модерации, при которой администратор должен установить флажок, чтобы запустить событие, поэтому метод будет вызываться там. +1 за предупреждение о почасовой оплате; может почувствовать приближение дополнительной таблицы: -O - person IrishChieftain; 31.01.2010
comment
Как и обещал, я завершил интеграцию этого в Cyclemania. В настоящее время метод ping вызывается вручную через инструмент администратора (конечно, его можно вызвать из других методов). Реализация также включает ведение журнала в таблицу базы данных (как вы упомянули) и задержку проверки связи на 60 минут (настраиваемая). Распределение данных по уровням довольно быстрое и грязное, и на данный момент используется ADO. ;) Обратите внимание на файл robots.txt, так как там также есть ссылка на карту сайта. Теперь Google может получать местоположения карты сайта из robots.txt. - person MissingLinq; 01.02.2010

Если вы позволяете пользователю добавлять события на веб-сайт, вы, вероятно, используете базу данных. Это означает, что вы можете сгенерировать XML-Sitemap во время выполнения следующим образом:

  • создайте страницу, на которой будет доступна ваша карта сайта (это не обязательно должен быть sitemap.xml, но также может быть sitemap.aspx или даже sitemap.ashx).
  • открыть соединение с базой данных
  • перебрать все записи и создать элемент Xml для каждой записи

Это сообщение в блоге должно помочь вам в дальнейшем: Создание поисковой системы Карта сайта на C #. Он не использует новые XElements из .Net 3.5, но будет работать нормально.

Вы можете поместить это на страницу aspx, но добавление HttpHandler, вероятно, лучше, как описано в том же блоге, в другом сообщении: (http://digitalcolony.com/2007/06/creating-httphandler-to-build-search.aspx)

person dampee    schedule 30.01.2010
comment
+1 как ты тоже был по деньгам. Почему это не обязательно должно быть в точности Sitemap.xml нуждается в дополнительных разъяснениях, потому что я думал, что это именно то, чего ожидает Google? - person IrishChieftain; 31.01.2010
comment
Нет, Google не этого ожидает по умолчанию. Есть несколько способов передать карту сайта поисковым системам. Дополнительную информацию можно найти на веб-сайте протокола Sitemap: sitemaps.org/protocol.php#informing < / а> - person dampee; 31.01.2010