Wielojęzyczna mapa XML SEO dla Sitecore

Wielojęzyczna mapa XML SEO dla Sitecore

Na rynku Sitecore dostępne są niektóre moduły Sitemap dla Sitecore. Ale czy robi to, co chcesz?
The Mapa witryny XML to świetny moduł.

  • Obsługiwane przez Sitecore
  • Tworzy plik sitemap.xml
  • Używa pola „__Updated” w sekcji Statystyki na stronie Element
  • Obsługa wielu witryn
  • Nie rób niczego z changefreq i priorytetem
  • Brak obsługi witryn wielojęzycznych
  • Brak poprawnego wsparcia dla stron podstawowych komponentu.
  • Brak generowania adresów URL https


Ten artykuł dotyczy tworzenia własnej mapy witryny, która działa inaczej niż popularny moduł rynku i jest jak najprostsza. Dzięki integracji potrzebnej w witrynie trudno jest to zrobić w module.

Istniejąca mapa witryny SEO XML dla modułów Sitecore generuje błędne daty modyfikacji i nie jest wielojęzyczna. Dzięki prostej konfiguracji i kodowi możesz tworzyć własne
wysoce zintegrowane sitemap.xml i używać innych właściwości ze schematu zdefiniowanego na sitemaps.org z dodatkową konfiguracją strony.

Specyfikacje Sitemap.xml.

Etykietka

Wymagane lub opcjonalne

Opis

<loc>

wymagany

Adres URL z protokołem

<lastmod>

opcjonalny

datetime

<zmienićzapytanie>

opcjonalny

  • zawsze
  • cogodzinny
  • codziennie
  • co tydzień
  • miesięczny
  • rocznie
  • nigdy

<priority>

opcjonalny

od 0,0 do 1,0

Jaki jest powód, dla którego chcesz mieć plik sitemap.xml? Moje narzędzie SEO mówi. Jasne, że nie ma sensu, jeśli masz jeden lub nie. Tak go używasz.

Lastmod jest trudny, ponieważ strona może zawierać wiele komponentów lub innych odnośników. Z tego powodu dobrym pomysłem jest pominięcie tego opcjonalnego atrybutu. Alternatywnie Brak poprawnego wsparcia dla podstawowych stron komponentów lub dłuższy czas renderowania i przechodzenie przez odniesienia w celu znalezienia daty ostatniej modyfikacji.

Indeksuj tylko żądane strony.

Sitemap.xml i robots.txt są również miłe dla hakerów. Jeśli nie jest prawidłowo używany, może zawierać dla nich interesujące łącze. Więc musisz wiedzieć, co indeksować, a co nie. W przypadku „modułu XML mapy witryny” możesz zdefiniować szablony do indeksowania lub ignorowania. Istnieje ryzyko zezwalania na niektóre strony testowe lub strony lądowań, które nie mają zamiaru indeksować za pomocą wyszukiwarki. Możesz zapobiec temu za pomocą <META NAME = "ROBOTS" CONTENT = "NOINDEX, NOFOLLOW"> na stronie. Ale oczywiście lepiej wykluczyć z mapy witryny. Rozwiązaniem jest stworzenie pola „Ukryj w mapie witryny SEO XML” i umieść go na swoich stronach, aby kontrolować zachowanie.

Tag changefreq

Changefreq to tylko wskazówka dla wyszukiwarki. Aby zaoszczędzić na przepustowości i cyklach procesora, możesz ustawić wyższą wartość na zarchiwizowanych stronach. Używając różnych wartości, możesz zwiększyć prawdopodobieństwo, że najczęściej zmieniane strony są odwiedzane przez wyszukiwarki. Rozwiązaniem jest stworzenie pola „Priorytet mapy witryny XML” i umieszczenie go na swoich stronach, aby kontrolować zachowanie.

Znacznik priorytetu

Priorytet Jak wspomniano w Changefreq, również ustawienia Priorytetu to tylko przewodnik dla Google lub jakiejkolwiek innej wyszukiwarki, której należy przestrzegać podczas indeksowania witryny. Priorytet przypisany stronie nie ma wpływu na pozycję adresów URL na stronach wyników wyszukiwarki. Informacje te mogą być wykorzystywane przez wyszukiwarki do wyboru z adresów URL w tej samej witrynie. Możesz użyć tego tagu, aby zwiększyć prawdopodobieństwo, że najważniejsze strony są obecne w indeksie wyszukiwania.
Rozwiązaniem jest stworzenie pola „Częstotliwość zmian mapy witryny XML” i umieszczenie go na swoich stronach w celu kontrolowania zachowania.

Uwaga: Przypisanie wysokiego priorytetu wszystkim adresom URL w witrynie nie przyniesie żadnego efektu. Ponieważ priorytet jest względny, można go używać tylko do rozróżniania adresów URL w witrynie.

Kod do tworzenia własnej mapy witryny XML SEO.

Uwaga: istnieje inna wersja tego kodu z większym kodem i teraz nazywana procesorem SEO z robotem.txt Procesor SEO

Następująca mapa witryny współpracuje z polami na elementach strony, aby kontrolować wartość zmiany i priorytet oraz opcję ukrywania.

  • Obsługa wielu witryn
  • użyj changefreq i priorytet
  • Opcjonalna obsługa witryn wielojęzycznych
  • Obsługa podstawowych stron komponentów.
  • Opcjonalna obsługa lastmod (dodaj kod)

przy użyciu System.Collections.Generic; przy użyciu System.Text; using System.Text.RegularExpressions; za pomocą Sitecore.Data; przy użyciu Sitecore.Data.Fields; przy użyciu Sitecore.Data.Items; korzystanie z Sitecore.Links; przestrzeń nazw Mirabeau.Website.Helpers {publiczna statyczna klasa XmlSitemap {// publiczny język statyczny ciąg pojedynczy GetXml () {Baza danych db = global :: Sitecore.Context.Database; var homeitem = global :: Sitecore.Context.Item.GetHomeItem (); var query = string.Format ("fast: {0} // *", EscapeSitecoreFastQueryPath (homeitem.Paths.FullPath)); var detailList = new List <Item> (db.SelectItems (query)); detailList.Add (homeitem); var options = global :: Sitecore.Links.LinkManager.GetDefaultUrlOptions (); options.AlwaysIncludeServerUrl = true; zwróć CreateSiteMapUrls (detailList, opcje); } // wielojęzyczny publiczny statyczny ciąg GetXml (lista <string> languagelist) {Database db = global :: Sitecore.Context.Database; string sitemapLinks = string.Empty; foreach (var language in languagelist) {Language currentSiteLanugage; if (Language.TryParse (język, out currentSiteLanugage)) {Sitecore.Context.SetLanguage (currentSiteLanugage, true); } var homeitem = global :: Sitecore.Context.Item.GetHomeItem (); var query = string.Format ("fast: {0} // *", EscapeSitecoreFastQueryPath (homeitem.Paths.FullPath)); var detailList = new List <Item> (db.SelectItems (query)); detailList.Add (homeitem); var options = global :: Sitecore.Links.LinkManager.GetDefaultUrlOptions (); options.AlwaysIncludeServerUrl = true; options.LanguageEmbedding = LanguageEmbedding.Always; options.Language = Language.Parse (język); options.EmbedLanguage (LanguageManager.GetLanguage (język)); sitemapLinks + = CreateSiteMapUrls (detailList, opcje); } return sitemapLinki; } private static string CreateSiteMapUrls (List <Item> detailList, UrlOptions urlOptions) {StringBuilder returnString = new StringBuilder (); const string defaultpagechange = "daily"; // Strona eache Sitecore Fields musi zawierać to pole. var HideInSeoXmlSitemap = "Ukryj w mapie witryny XML SEO"; var XmlSitemapPriority = "Priorytet mapy witryny XML"; var XmlSitemapChangeFreq = "Częstotliwość zmiany mapy witryny XML"; foreach (element pozycji w detailList) {if (! item.GetCheckBoxValueDefaultTrue (HideInSeoXmlSitemap)) {// GetCheckBoxValueDefaultTrue, aby filtrować wartości puste, takie jak elementy składowe var url = LinkManager.GetItemUrl (item, urlOptions); var prio = item.GetStringValue (XmlSitemapPriority); var changefreq = item.GetStringValue (XmlSitemapChangeFreq); if (string.IsNullOrEmpty (changefreq)) {changefreq = defaultpagechange; } if (string.IsNullOrEmpty (prio)) {returnString.AppendFormat ("<url> <loc> {0} </loc> <changefreq> {1} </changefreq> </url>", url, changefreq); } else {returnString.AppendFormat ("<url> <loc> {0} </loc> <changefreq> {1} </changefreq> <priority> {2} </priority> </url> n", url , changefreq, prio); }}} return returnString.ToString (); } #region Rozszerzenie metody i pomocnicy publiczny statyczny Element GetHomeItem (ten element pozycji) {global :: Sitecore.Sites.SiteContext site = global :: Sitecore.Context.Site; if (site == null) {return null; } global :: Sitecore.Data.Database db = global :: Sitecore.Context.Database; zwróć db.GetItem (site.StartPath); } public static string GetStringValue (ten element Item, string fieldName) {if (item! = null && item.Fields [fieldName]! = null &&! string.IsNullOrEmpty (item.Fields [fieldName] .Value)) {return item. Pola [fieldName] .Value; } return string.Empty; } public static bool GetCheckBoxValueDefaultTrue (ten element Item, string fieldName) {CheckboxField checkBox = item.Fields [fieldName]; if (checkBox! = null) {return checkBox.Checked; } return true; } public static string EscapeSitecoreFastQueryPath (string path) {return Regex.Replace (ścieżka, @ "([^ /] +)", "# $ 1 #"). Zastąp ("# * #", "*"); } #endregion}}

Układ (MVC) dla jednego języka

@using Mirabeau.Website.Helpers @ {Response.ContentType = "text / xml"; } <? xml version = "1.0" encoding = "UTF-8"?> <urlset xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9" xmlns: xsi = "http: // www. w3.org/2001/XMLSchema-instance "xsi: schemaLocation =" http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd " > @ Html.Raw (XmlSitemap.GetXml ()) </urlset>

Przykładowy układ dla wielu języków

@using Mirabeau.Website.Helpers @ {Response.ContentType = "text / xml"; } <? xml version = "1.0" encoding = "UTF-8"?> <urlset xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9" xmlns: xsi = "http: // www. w3.org/2001/XMLSchema-instance "xsi: schemaLocation =" http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd " > @ Html.Raw (XmlSitemap.GetXml (nowa lista <string> () {"en", "nl-NL"})) </urlset>

Przedmioty Sitecore

Poniżej szablony Sitecore. Utwórz listę zmian dla listy rozwijanej. I utwórz pola mapy witryny XML, użyj listy changefreq dla listy rozwijanej dla pola XML Zmiana mapy witryny.

I utwórz pola mapy witryny XML, użyj listy changefreq dla listy rozwijanej dla pola XML Zmiana mapy witryny

Utwórz sprawdzanie poprawności i wartość domyślną dla pola Priorytet mapy witryny XML

Utwórz sprawdzanie poprawności i wartość domyślną dla pola Priorytet mapy witryny XML

Utwórz układ mapy witryny i link do widoku. Utwórz szablon mapy witryny i ustaw układ mapy witryny w wartościach __Standard. I stwórz element mapy witryny poniżej strony głównej. Z mapą witryny jako nazwą.

Teraz możesz zrobić prośbę do mapy witryny za pomocą /sitemap.aspx, aby zmienić to na /sitemap.xml, możemy dodać ją do „Dozwolonych rozszerzeń”

Uczyń URL .xml możliwym do renderowania układu

Umieść to w pliku /App_Config/Include/Mirabeau.SitemapXml.config

<konfiguracja xmlns: patch = "http://www.sitecore.net/xmlconfig/"> <sitecore> <pipelines> <preprocessRequest help = "Procesory powinny pochodzić z Sitecore.Pipelines.PreprocessRequest.PreprocessRequestProcessor"> <typ procesora = " Sitecore.Pipelines.PreprocessRequest.FilterUrlExtensions, Sitecore.Kernel "> <param desc =" Dozwolone rozszerzenia (rozdzielone przecinkami) "> aspx, ashx, asmx, xml </param> </processor> </preprocessRequest> </pipelines> < / sitecore> </configuration>

Ponieważ hartowanie zabezpieczeń Sitecore nie zezwala na pliki xml

Nie ma problemu, informujemy wyszukiwarkę, jaki jest adres strony mapy witryny, używając robots.txt

Agent użytkownika: *
Mapa strony: /sitemap.aspx

Pipeline lub Layout

Ten prototypowy kod używa układu. Możliwe jest również użycie potoku, zobacz kod z Mapa witryny XML korzystanie z układu jest bardzo prostym rozwiązaniem standardowym, nie wymaga konfiguracji i można również użyć pamięci podręcznej układu Sitecore.

Strony wielojęzyczne

Na stronach wielojęzycznych należy umieścić adres URL dla wszystkich języków w pliku sitemap.xml. Ten kod może to zrobić i jest łatwy do dostosowania do Twoich potrzeb.

powiązane linki

Wielojęzyczny wielojęzyczny Procesor SEO
Moduł z obsługą Sitecore Mapa witryny XML
Wymagana zerowa konfiguracja i łatwa instalacja Generator map witryn XML
Korzystanie z modułu XML Sitemap w hartowanym środowisku Multi-site
Łatwy rurociąg bez zapisywania na dysku Prosty XML mapy witryny
Wygeneruj mapę witryny Google dla miliona plus strona przedmiotów Sitecore
Ultimate Sitemap XML oparty na XML mapy witryny z powiązanymi polami meta

Ale czy robi to, co chcesz?
Xml?
ContentType = "text / xml"; } <?
Encoding = "UTF-8"?
ContentType = "text / xml"; } <?
Encoding = "UTF-8"?