¿Cuál es el mejor enfoque para la redirección de páginas antiguas en las páginas de Jekyll y GitHub?


Tengo un blog en github pages-jekyll

¿Cuál es la mejor manera de resolver la migración de la estrategia de url?

Encontré que la mejor práctica en común es crear htaccess así

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

Pero no parece funcionar con Github. Otra solución que encontré es crear tarea rake, que generará páginas de redirección. Pero como es un html, no es capaz de enviar 301 head, por lo que los rastreadores SE no lo reconocerán como una redirección.

8 answers

La mejor solución es usar <meta http-equiv="refresh" y <link rel="canonical" href=

Funciona muy bien, el Bot de Google reindexó todo mi sitio web bajo nuevos enlaces sin perder posiciones. También los usuarios son redirigidos a las nuevas publicaciones de inmediato.

<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/" />

Usando <meta http-equiv="refresh" redirigirá a cada visitante a la nueva publicación. En cuanto a Google Bot, trata <link rel="canonical" href= como redireccionamiento 301, el efecto es que obtiene sus páginas reindexadas y eso es lo que desea.

Describí todo el proceso de cómo moví mi blog de Wordpress para Octopress aquí. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages

 61
Author: Konrad Podgórski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-21 10:24:22

¿Has probado el plugin Jekyll Alias Generator?

Pones las URL de alias en el asunto frontal YAML de un post:

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

Cuando un usuario visita una de las URL de alias, se le redirige a la url principal a través de una actualización de etiqueta meta:

<!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>

Ver también esta entrada del blog sobre el tema.

 21
Author: ms-ati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-03 03:22:23

Esta solución le permite usar redirecciones HTTP verdaderas vía .htaccess - sin embargo, nada que involucre .htaccess funcionará en las páginas de GitHub porque no usan Apache.

A partir de mayo de 2014 GitHub Pages admite redirecciones, pero de acuerdo con la documentación jekyll-redirect-from Gem todavía se basan en HTTP-REFRESH (usando etiquetas <meta>), que requiere una carga completa de la página antes de que pueda ocurrir la redirección.

No me gusta el enfoque <meta> así que preparó una solución para cualquiera que busque proporcionar redirecciones HTTP 301 reales dentro de an .archivo htaccess usando Apache, que sirve un sitio Jekyll pre-generado:


Primero, agregue .htaccess a la propiedad include en _config.yml

include: [.htaccess]

A continuación, crear un .htaccess y asegúrese de incluir YAML front matter . Esos guiones son importantes porque ahora Jekyll analizará el archivo con Liquid, el lenguaje de plantillas de Jekyll:

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

Asegúrese de que sus mensajes que requieren las redirecciones tienen dos propiedades como esta:

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

Ahora en .htaccess, simplemente agrega un bucle:

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

Esto generará dinámicamente .htaccess cada vez que compila el sitio, y el include en su archivo de configuración se asegura de que .htaccess lo convierte en el directorio _site.

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

A partir de ahí, depende de usted servir _site usando Apache. Normalmente clono el repositorio completo de Jekyll en un directorio no webroot, entonces mi vhost es un enlace simbólico a la carpeta _site:

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

¡Tada! Ahora Apache puede servir la carpeta _site desde su raíz virtual, completa con .redirecciones con tecnología htaccess que utilizan cualquier código de respuesta HTTP que desee!

Usted podría incluso conseguir super fantasía y utilizar una propiedad redirect dentro de la materia frontal de cada mensaje para designar qué código de redirección a utilizar en su .bucle htaccess.

 10
Author: Chris Ruppel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-24 21:04:48

La mejor opción es evitar por completo los cambios de url configurando el formato de enlace permanente en _config.yml para que coincida con su antiguo blog.

Más allá de eso, la solución más completa es generar páginas de redirección, pero no necesariamente vale la pena el esfuerzo. Terminé simplemente haciendo mi página 404 un poco más amigable, con javascript para adivinar la nueva url correcta. No hace nada para la búsqueda, pero los usuarios reales pueden llegar a la página que estaban buscando y no hay cosas heredadas que admitir en el resto del código.

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

 5
Author: Tom Clarkson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-15 07:44:18

Redirigir-desde plugin https://github.com/jekyll/jekyll-redirect-from#redirect-to es compatible con GitHub y lo hace fácil:

_config.yml:

gems:
  - jekyll-redirect-from

a.md:

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

Como se explica en: https://help.github.com/articles/redirects-on-github-pages /

Ahora:

firefox localhost:4000/a

Te redirigirá a example.com.

El plugin toma el control siempre que el redirect_to está definido por la página.

Probado en páginas de GitHub v64.

Nota: esta versión tiene un grave error recientemente corregido que reutiliza erróneamente el diseño predeterminado para la redirección: https://github.com/jekyll/jekyll-redirect-from/pull/106

Método de diseño manual

Si no tienes ganas de usar https://github.com/jekyll/jekyll-redirect-from es fácil implementarlo usted mismo:

a.md:

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

_layouts/redirect.html basado en Redirigir desde una página 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>

Al igual que este ejemplo, el complemento redirect-from no genera 301s, solo redirige meta + JavaScript.

Podemos verificar lo que está pasando con:

curl localhost:4000/a
 4
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:07

Dado que github no permite redireccionamientos 301 (lo cual no es sorprendente), tendrás que tomar una decisión entre moverte a tu nueva estructura de URL (y recibir un golpe en el motor de búsqueda) o dejar las URL como están. Te sugiero que sigas adelante y hagas el movimiento. Deje que los chips del motor de búsqueda caigan donde puedan. Si alguien accede a uno de tus enlaces antiguos a través del motor de búsqueda, será redirigido a la nueva ubicación. Con el tiempo, los motores de búsqueda recogerán sus cambios.

Algo que usted puede hacer para ayudar a las cosas es crear un Sitemap donde solo enumere sus nuevas páginas y no las antiguas. Esto debería acelerar la sustitución de las URL antiguas por las nuevas. Además, si todas tus URL antiguas están en tu directorio '/programovani', también puedes usar robots .txt file para indicar a los rastreadores futuros que deben ignorar ese directorio. Por ejemplo:

User-agent: *
Disallow: /programovani/

Los motores de búsqueda tardarán un poco en ponerse al día con los cambios. Esto no es gran cosa. Como mientras las URL antiguas todavía existan y redirigan a las personas reales a las páginas activas, estarás bien.

 2
Author: Alan W. Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-19 18:24:13

Como otros han mencionado, la mejor solución es preservar las URL de trabajo o duplicar las páginas y especificar una URL canónica.

Dado que github pages no admite redirecciones verdaderas, elegí configurar rerouter en Heroku para devolver redirecciones 301 (permanentes) del dominio antiguo de mi sitio al nuevo. Describí los detalles aquí:

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

 1
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-16 03:37:06

Jekyll ha pasado por algunas actualizaciones importantes en los últimos meses, por lo que tal vez esto no era posible cuando se publicó originalmente esta pregunta...

Jekyll soporta un atributo permalinken la sección YAML front-matter de tus publicaciones de blog. Puede especificar la URL que desea que tenga su publicación y Jekyll la usará (en lugar del nombre de archivo) al generar su sitio.

---
title: My special blog post
permalink: /programovani/2010/04/git-co-to-je-a-co-s-tim
---
My blog post markdown content
 1
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-25 04:02:22