Подтвердить что ты не робот

Каков наилучший подход для перенаправления старых страниц на страницах Jekyll и GitHub?

У меня есть блог на страницах github - jekyll

Каков наилучший способ решения миграции URL-адресов?

Я нашел, что наилучшей практикой является создание htaccess вроде так

Redirect 301 /programovani/2010/04/git-co-to-je-a-co-s-tim/ /2010/04/05/git-co-to-je-a-co-s-tim.html

Но он не работает с Github. Другим решением, которое я нашел, является создание задачи rake, которая будет генерировать страницы перенаправления. Но поскольку он html, он не может отправить 301 head, поэтому сканеры SE не будут распознавать его как перенаправление.

4b9b3361

Ответ 1

Лучшее решение - использовать как <meta http-equiv="refresh", так и <link rel="canonical" href=

Это работает очень хорошо, Google Bot переиндексировал весь мой сайт по новым ссылкам, не теряя позиции. Также пользователи сразу перенаправляются на новые сообщения.

<meta http-equiv="refresh" content="0; url=http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/">
<link rel="canonical" href="http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/" />

Использование <meta http-equiv="refresh" перенаправляет каждого посетителя на новый пост.  Что касается Google Bot, он рассматривает <link rel="canonical" href= как 301-редирект, эффект заключается в том, что вы получаете свои страницы повторно и это то, что вы хотите.

Я описал весь процесс, как я переместил свой блог с Wordpress на Octopress здесь. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages

Ответ 2

Вы пробовали плагин Jekyll Alias ​​Generator?

Вы помещаете URL-адреса псевдонима в переднем деле YAML сообщения:

---
  layout: post
  title: "My Post With Aliases"
  alias: [/first-alias/index.html, /second-alias/index.html]
---

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

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta http-equiv="refresh" content="0;url=/blog/my-post-with-aliases/" />
  </head>
</html>

См. также этот пост в блоге по этому вопросу.

Ответ 3

Это решение позволяет использовать истинные HTTP-перенаправления через .htaccess, однако ничего не происходит .htaccess будет работать на страницах GitHub, потому что они не используют Apache.

По состоянию на май 2014 года GitHub Pages поддерживает перенаправления, но согласно jekyll-redirect - из документации Gem они по-прежнему основаны на HTTP-REFRESH (используя теги <meta>), что требует полного нагрузка страницы до перенаправления.

Мне не нравится подход <meta>, поэтому я взломал решение для тех, кто хочет предоставить реальные переадресации HTTP 301 в файле .htaccess с помощью Apache, который обслуживает предварительно сгенерированный сайт Jekyll:


Сначала добавьте .htaccess в свойство include в _config.yml

include: [.htaccess]

Затем создайте файл .htaccess и обязательно включите элемент управления YAML. Эти тире важны, потому что теперь Jekyll будет анализировать файл с Liquid, Jekyll templating language:

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

Убедитесь, что ваши сообщения, требующие перенаправления, имеют два свойства:

---
permalink: /my-new-path/
original: blog/my/old/path.php
---

Теперь в .htaccess просто добавьте цикл:

{% for post in site.categories.post %}
  RewriteRule ^{{ post.original }} {{ post.permalink }} [R=301,L]
{% endfor %}

Это будет динамически генерировать .htaccess каждый раз, когда вы создаете сайт, а include в вашем файле конфигурации гарантирует, что .htaccess превратит его в каталог _site.

RewriteRule ^blog/my/old/path.php /my-new-path/ [R=301,L]

Оттуда вам будет предложено _site использовать Apache. Я обычно клонировал полное репозиторию Jekyll в каталог без веб-кортежа, тогда мой vhost является символической ссылкой на папку _site:

ln -s /path/to/my-blog/_site /var/www/vhosts/my-blog.com

Тада! Теперь Apache может обслуживать папку _site из вашего виртуального корня, в комплекте с перенаправленными перенаправлением .htaccess, которые используют любой код ответа HTTP, который вы хотите!

Вы даже можете получить супер фантазию и использовать свойство redirect в каждом почтовом фронте, чтобы указать, какой код перенаправления использовать в вашем цикле .htaccess.

Ответ 4

Лучший вариант - избежать изменения URL-адресов в целом, установив формат постоянной ссылки в _config.yml в соответствии с вашим старым блогом.

Кроме того, наиболее полным решением является создание страниц переадресации, но это не обязательно стоит усилий. Я закончил тем, что сделал мою страницу 404 немного дружелюбнее, с javascript, чтобы угадать правильный новый url. Он не делает ничего для поиска, но фактические пользователи могут попасть на страницу, которую они искали, и нет никакого остального материала для поддержки в остальной части кода.

http://tqcblog.com/2012/11/14/custom-404-page-for-a-github-pages-jekyll-blog/

Ответ 5

Так как github не разрешает 301 переадресацию (что неудивительно), вам придется принять решение о переходе на новую структуру URL-адреса (и с помощью поисковой системы) или оставить URL-адреса так, как они есть, Я предлагаю вам пойти вперед и сделать ход. Пусть чипы поисковых систем упадут там, где они могут. Если кто-то ударит по одной из ваших старых ссылок через поисковую систему, они будут перенаправлены на новое место. Со временем поисковые системы подберут ваши изменения.

Что-то, что вы можете сделать, чтобы помочь решить проблему, - это создать Sitemap, в котором вы будете перечислять только новые страницы, а не старые. Это должно ускорить замену старых URL новыми. Кроме того, если все ваши старые URL-адреса находятся в каталоге '/programovani', вы также можете использовать файл robots.txt, чтобы сообщить о будущих обходах, которые они должны игнорировать этот каталог. Например:

User-agent: *
Disallow: /programovani/

Для поисковых систем потребуется некоторое время, чтобы догнать изменения. Это не очень важно. Пока старые URL-адреса все еще существуют и перенаправляют фактических людей на активные страницы, все будет в порядке.

Ответ 6

перенаправление из плагина https://github.com/jekyll/jekyll-redirect-from#redirect-to поддерживается GitHub и упрощает его:

_config.yml:

gems:
  - jekyll-redirect-from

a.md:

---
permalink: /a
redirect_to: 'http://example.com'
---

как описано в: https://help.github.com/articles/redirects-on-github-pages/

Сейчас:

firefox localhost:4000/a

перенаправит вас на example.com.

Плагин берет верх, когда redirect_to определяется страницей.

Протестировано на страницах GitHub v64.

Примечание: эта версия имеет серьезную недавно исправленную ошибку, которая неправильно использует макет по умолчанию для перенаправления: https://github.com/jekyll/jekyll-redirect-from/pull/106

Метод ручной компоновки

Если вам не нравится использовать https://github.com/jekyll/jekyll-redirect-from, его легко реализовать самостоятельно:

a.md:

---
layout: 'redirect'
permalink: /a
redir_to: 'http://example.com'
sitemap: false
---

_layouts/redirect.html на основе Перенаправление с HTML-страницы:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Redirecting...</title>
  {% comment %}
    Don't use 'redirect_to' to avoid conflict
    with the page redirection plugin: if that is defined
    it takes over.
  {% endcomment %}
  <link rel="canonical" href="{{ page.redir_to }}"/>
  <meta http-equiv="refresh" content="0;url={{ page.redir_to }}" />
</head>
<body>
  <h1>Redirecting...</h1>
  <a href="{{ page.redir_to }}">Click here if you are not redirected.<a>
  <script>location='{{ page.redir_to }}'</script>
</body>
</html>

Как и в этом примере, плагин redirect-from не генерирует 301, только meta + JavaScript перенаправляет.

Мы можем проверить, что происходит с:

curl localhost:4000/a

Ответ 7

Как упоминалось выше, лучшим решением является сохранение рабочих URL или дублирование страниц и определение canonical URL.

Поскольку страницы github не поддерживают настоящие переадресации, я решил настроить rerouter на Heroku, чтобы вернуть 301 (постоянную) переадресацию из мой старый домен на новый. Я описал детали здесь:

http://joey.aghion.com/simple-301-redirects/

Ответ 8

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

Jekyll поддерживает атрибут permalink в разделе YAML front-matter ваших сообщений в блоге. Вы можете указать URL-адрес, который вы хотите разместить в своем сообщении, и Jekyll будет использовать это (вместо имени файла) при создании вашего сайта.

---
title: My special blog post
permalink: /programovani/2010/04/git-co-to-je-a-co-s-tim
---
My blog post markdown content