Актуализируема Google Sitemap за ASP.NET 3.5 Web App Project

Работя върху проект за уеб приложение 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 SERP вече ще сочат към грешни страници. Ето защо трябва да съм сигурен, че картата на сайта отразява промените на страницата със събития веднага щом се случат.

Вече разгледах други 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, използвайки най-новата ви карта на сайта (прясно генерирана от горния метод).

Искате да сте сигурни, че ping работи само ако картата на сайта действително е актуализирана. Можете да използвате File.SetLastWriteTime на events.aspx в манипулатора AddNewEvent, за да укажете, че съдържащата страница е актуализирана.

Освен това внимавайте да се уверите, че не е имало ping за последния час (тъй като указанията на Google не препоръчват ping повече от веднъж на час).

Всъщност планирам да внедря това в следния OSS проект: http://cyclemania.codeplex.com. Ще ви уведомя, след като стане готово и можете да погледнете.

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

Ако позволите на вашия потребител да добавя събития към уебсайта, вероятно използвате база данни. Това означава, че можете да генерирате XML-Sitemap по време на изпълнение по следния начин:

  • създайте страница, където вашата карта на сайта ще бъде достъпна (това не е необходимо да е sitemap.xml, но може да бъде и sitemap.aspx или дори sitemap.ashx).
  • отворете връзка с база данни
  • преминете през всички записи и създайте Xml елемент за всеки запис

Тази публикация в блога трябва да ви помогне допълнително: Създайте търсачка SiteMap в 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-protocol: sitemaps.org/protocol.php#informing - person dampee; 31.01.2010