Как использовать rel = canonical с псевдонимами Sitecore?

Я унаследовал архитектуру Sitecore, которая является беспорядком из дублирующего контента SEO POV.

Существует множество псевдонимов, которые были созданы (и индексированы поисковыми системами) для многих страниц второго уровня сайта.

Из-за проблем с сервером я не могу перенаправить эти обломанные страницы 301, поэтому я хотел бы использовать тег rel = canonical, чтобы попытаться заставить Google /Bing распознать правильные страницы, которые я хотел бы показать в индексе.

Я заблокировал самые посторонние обманутые страницы с помощью файла robots.txt, однако, поскольку Google /Bing уже рассмотрел многие обломанные страницы, мне нужно, чтобы они были доступны для пауков, но удалены из индекса.

Ловушка, поскольку обманутые страницы являются псевдонимами (и на самом деле физически не существуют в Sitecore, которые я могу найти), я не уверен, как использовать rel = canonical - или если я даже могу в этой ситуации ..

seo
4 голоса | спросил Mike G 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 20:28:13 +0400 2011, 20:28:13

3 ответа


4

Майк, Я думаю, что самое легкое и первое место, которое я бы начал, это изменить свой макет (.aspx), чтобы страницы с использованием псевдонима имели код <link rel="canonical" href="..."/> в голове.

Вы можете использовать код, предоставленный этот ответ , чтобы помочь вам.

По существу, добавьте asp:Literal в <head> вашей страницы .aspx. Теперь, на Page_Load вашего .aspx.cs вы можете сделать следующее

if (global::Sitecore.Configuration.Settings.AliasesActive && global::Sitecore.Context.Database.Aliases.Exists(System.Web.HttpContext.Current.Request.RawUrl))
{
    const string format = "<link rel=\"canonical\" href=\"{0}://{1}{2}\"/>";
    global::Sitecore.Data.Items.Item targetItem = global::Sitecore.Context.Database.GetItem(global::Sitecore.Context.Database.Aliases.GetTargetID(System.Web.HttpContext.Current.Request.RawUrl));

    canonicalLiteral.Text = string.Format(format, "http", System.Web.HttpContext.Current.Request.Url.Host, global::Sitecore.Links.LinkManager.GetItemUrl(targetItem));
}

Примечание. Возможно, вам придется настроить это на основе конфигурации вашего LinkManager.

ответил Sean Kearney 16 32011vEurope/Moscow11bEurope/MoscowWed, 16 Nov 2011 21:27:47 +0400 2011, 21:27:47
2

Независимо от того, имеет ли элемент какие-либо псевдонимы, вам, скорее всего, понадобится канонический URL-адрес контекстного элемента; Поэтому решение еще проще:

var options = LinkManager.GetDefaultUrlOptions();
options.AlwaysIncludeServerUrl = true;
canonicalLiteral.Text =
Sitecore.Links.LinkManager.GetItemUrl(Sitecore.Context.Item, options);
ответил Chris 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 26 Sep 2012 19:33:24 +0400 2012, 19:33:24
1

Используйте ответ Шона, но я бы использовал LinkManager для создания всего URL:

var options = LinkManager.GetDefaultUrlOptions();
options.AlwaysIncludeServerUrl = true;
canonicalLiteral.Text = LinkManager.GetItemUrl(global::Sitecore.Links.LinkManager.GetItemUrl(targetItem));
ответил Paul George 18 52011vEurope/Moscow11bEurope/MoscowFri, 18 Nov 2011 16:22:54 +0400 2011, 16:22:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132