URL-адреса перенаправления Sitecore

Я работаю над переадресацией URL-адресов 301, я пробовал некоторые модули перенаправления Sitecore раньше, но я ищу рекомендуемый подход, на самом деле у меня есть требования удалить языковой код «en» из URL-адреса, если язык английский, и сохранить его для других языков, я сделал это в менеджере ссылок, и, например, когда пользователь нажимает на ссылку о нас, он переходит на страницу без языкового кода, например:

www.mywebsite.com/about-us

но все же я могу получить доступ к URL-адресу с языковым кодом вручную следующим образом:

www.mywebstie.com/en/about-us

так что теперь у меня есть два URL-адреса на одну и ту же страницу. и это не рекомендуется для SEO. и, в конце концов, мне нужен только один URL-адрес для каждой страницы.

другой пример также, о нас может быть доступ через дефис

www.mywebstie.com/about-us

и с космосом

www.mywebstie.com/о нас

каков наилучший подход к решению этой проблемы?


person Ayman Barhoum    schedule 23.04.2016    source источник


Ответы (2)


Можно использовать Canonical, <link id="Canonical" rel="canonical" href="/about-us/" /> тогда проблемы с SEO больше не будет.

Или просто создайте перенаправление в своей мастер-странице примерно так:

string goodUrl = LinkManager.GetItemUrl(Sitecore.Context.Item);
if (goodUrl != Request.Path)
{
    Response.RedirectPermanent(goodUrl);
}

Помимо уже упомянутого вами варианта, это также будет работать /about-us.aspx и /about-us.ashx. Другой вариант: вы также можете решить это в конвейере httpRequestBegin, ItemResolver.

person Jan Bluemink    schedule 23.04.2016

Существует широкий спектр вариантов, как вы можете добиться требуемого поведения:

  1. Вы можете настроить свой сайт Sitecore

    Настройте LinkManager (Sitecore.config): измените настройки в LinkProvider по умолчанию. Для исключения языка из URL-адресов установите languageEmbedding="never" languageLocation="queryString".

    Настройте encodeNameReplacements (Sitecore.config): добавьте это правило

    ‹replace mode="on" find=" " replaceWith="-"›

    для замены пробелов тире.

  2. Используйте канонические ссылки.

  3. Напишите ваш собственный LinkProvider для ваших целей

  4. Установите и настройте расширения IIS, которые могут перенаправлять ваши запросы.

    например: Переписать URL, Фильтр перезаписи Ionic Isapi или ISAPI_Rewrite Но будьте осторожны, если планируете использовать это модули на экземпляре CM.

Я бы порекомендовал вам попробовать настроить провайдер Sitecore LinkManager, правила encodeNameReplacement (пункт 1 в списке) и добавить канонические ссылки (пункт 2 в списке). Кажется, этого будет достаточно для вашей задачи.

Если конфигурации и канонических ссылок будет недостаточно, вы можете расширить поведение Sitecore по умолчанию (пункт 3 в списке) или установить и настроить модули IIS (пункт 4 в списке).

person Anton    schedule 23.04.2016
comment
Я уже реализовал пользовательский поставщик ссылок, чтобы решить языковую проблему, чтобы удалить en из URL-адреса, если язык английский, и это нормально, когда я нажимаю на любую ссылку на английском языке, пользователь переходит к URL-адресу без en, но если пользователь вручную переходит к URL-адресу с кодом языка, URL-адрес будет работать. вместо этого он должен быть перенаправлен на исходный URL. это главная проблема. и я не могу использовать средство перезаписи URL-адресов IIS в этом случае, поскольку преобразователь языка sitecore появляется после обработки iis. - person Ayman Barhoum; 23.04.2016
comment
Та же проблема с заменой пробела на тире. на самом деле я создал событие при сохранении/обновлении элемента, чтобы заменить пробел в имени элемента на -, но если у вас есть отображаемое имя с пробелом, и вы перемещаетесь по URL-адресу элемента с отображаемым именем, это будет работать. поэтому о нас и о нас оба будут доступны в URL-адресе - person Ayman Barhoum; 23.04.2016
comment
1) Если все ваши ссылки будут формироваться с настроенным менеджером ссылок и заменой кодового имени, то поисковый робот не будет знать о других типах ссылок. 2) Если вы хотите точное перенаправление 302, вам следует добавить собственный процессор в конвейер ‹httpRequestBegin› и перенаправлять пользователей, если URL-адрес соответствует некоторым правилам. - person Anton; 23.04.2016
comment
О перезаписи URL-адреса IIS: это довольно разумно, вы можете написать правило для перемещения языка из пути en в строку запроса ?sc_lang=/en/. В этом случае у вас не будет проблем с языковым преобразователем Sitecore. - person Anton; 23.04.2016