redirect - ¿Cuál es el mejor enfoque para la redirección de páginas antiguas en las páginas de Jekyll y GitHub?
http-status-code-301 github-pages (8)
Tengo blog en páginas github - jekyll
¿Cuál es la mejor manera de resolver la migración de la estrategia url?
Encontré que la mejor práctica en común es crear htaccess como tal
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 parece que no funciona con Github. Otra solución que encontré es crear tareas de rake, que generarán páginas de redirección. Pero como es un html, no puede enviar 301
head, por lo que los rastreadores de SE no lo reconocerán como una redirección.
Esta solución le permite usar redireccionamientos HTTP verdaderos a través de .htaccess; sin embargo, nada relacionado con .htaccess funcionará en las páginas de GitHub porque no usan Apache.
A partir de mayo de 2014, help.github.com/articles/redirects-on-github-pages , pero de acuerdo con la documentación de jekyll-redirect-from Gem todavía se basan en HTTP-REFRESH (usando etiquetas <meta>
), lo que requiere una carga de página completa antes de que se produzca 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 un archivo .htaccess usando Apache, que sirve un sitio Jekyll pregenerado:
Primero, agregue .htaccess
a la propiedad include
en _config.yml
include: [.htaccess]
A continuación, cree un archivo .htaccess y asegúrese de incluir el material frontal de YAML . 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 publicaciones que requieren redireccionamientos tengan dos propiedades, por ejemplo:
---
permalink: /my-new-path/
original: blog/my/old/path.php
---
Ahora en .htaccess, solo 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 construya el sitio, y la include
en su archivo de configuración asegura que .htaccess lo haga en el directorio _site
.
RewriteRule ^blog/my/old/path.php /my-new-path/ [R=301,L]
A partir de ahí, le corresponde a usted servir _site
usando Apache. Normalmente clono todo el repo de Jekyll en un directorio no webroot, luego 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 redireccionamientos .htaccess que utilizan el código de respuesta HTTP que desee.
Incluso podría ser súper elegante y usar una propiedad de redirect
dentro de la portada de cada entrada para designar qué código de redirección usar en su ciclo .htaccess.
¿Has probado el plugin Jekyll Alias Generator ?
Coloca las URL de alias en el frente de YAML de una publicación:
---
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 metaetiqueta:
<!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 publicación en el blog sobre el tema.
Como otros han mencionado, la mejor solución es preservar las URL que funcionan o duplicar las páginas y especificar una URL canonical .
Como las páginas github no son compatibles con redireccionamientos verdaderos, decidí configurar el rerouter en Heroku para devolver 301 redireccionamientos (permanentes) del dominio antiguo de mi sitio al nuevo. Describí los detalles aquí:
Dado que github no permite 301 redireccionamientos (lo cual no es sorprendente), tendrá que tomar una decisión entre mudarse a su nueva estructura de URL (y aceptar un hit de motor de búsqueda) o dejar las URL como están. Te sugiero que vayas y hagas el cambio. Deja que las fichas del motor de búsqueda caigan donde puedan. Si alguien accede a uno de tus enlaces anteriores a través del motor de búsqueda, se le redirigirá a la nueva ubicación. Con el tiempo, los motores de búsqueda recogerán sus cambios.
Algo que puede hacer para ayudar es crear un Sitemap en el que solo enumere sus páginas nuevas y no las antiguas. Esto debería acelerar el reemplazo de las URL antiguas por las nuevas. Además, si todas sus URL anteriores están en su directorio ''/ programovani'', también puede usar un archivo robots.txt para indicar a los rastreos futuros que deben ignorar ese directorio. Por ejemplo:
User-agent: *
Disallow: /programovani/
Llevará un tiempo que los motores de búsqueda se pongan al día con los cambios. Esto no es realmente un gran problema. Mientras que las URL antiguas aún existan y redirijan a las personas reales a las páginas activas, estarás bien.
Jekyll ha tenido algunas actualizaciones importantes en los últimos meses, así que tal vez esto no fue posible cuando esta pregunta se publicó originalmente ...
Jekyll admite un atributo de permalink
en la sección de contenido inicial de YAML de las publicaciones de tu 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
La mejor opción es evitar los cambios de URL por completo configurando el formato de enlace permanente en _config.yml para que coincida con su blog anterior.
Más allá de eso, la solución más completa es generar páginas de redireccionamiento, pero no necesariamente vale la pena el esfuerzo. Terminé simplemente haciendo que mi página 404 sea más amigable, con javascript para adivinar la nueva URL correcta. No hace nada para la búsqueda, pero los usuarios reales pueden acceder a la página que estaban buscando y no hay elementos heredados que admitir en el resto del código.
http://tqcblog.com/2012/11/14/custom-404-page-for-a-github-pages-jekyll-blog/
La mejor solución es usar tanto <meta http-equiv="refresh"
como <link rel="canonical" href=
Funciona muy bien, Google Bot reindexó todo mi sitio web bajo nuevos enlaces sin perder posiciones. Además, 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/" />
El uso de <meta http-equiv="refresh"
redirigirá a cada visitante a la nueva publicación. En cuanto a Google Bot, se trata <link rel="canonical" href=
como 301 redirigir, el efecto es que usted vuelve a indexar sus páginas y eso es lo que quiere.
Describí todo el proceso de cómo moví mi blog de Wordpress a Octopress aquí. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages
redirect-from 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
lo redirigirá a example.com
.
El complemento toma el control siempre que redirect_to
esté definido por la página.
Probado en las páginas v64 de GitHub.
Nota : esta versión tiene un error gravemente corregido recientemente que reutiliza erróneamente el diseño predeterminado para la redirección: https://github.com/jekyll/jekyll-redirect-from/pull/106
Método de disposición manual
Si no desea utilizar https://github.com/jekyll/jekyll-redirect-from , es fácil de implementar 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 en este ejemplo, el complemento redirect-from
no genera 301, solo redireccionamientos de meta
+ JavaScript.
Podemos verificar qué está pasando con:
curl localhost:4000/a