web-dev-qa-db-fra.com

Quelle est la meilleure approche pour la redirection des anciennes pages dans les pages Jekyll et GitHub?

J'ai un blog sur les pages Github - Jekyll

Quelle est la meilleure façon de résoudre la migration de la stratégie d'URL?

J'ai trouvé que la meilleure pratique en commun est de créer htaccess comme ça

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

Mais cela ne semble pas fonctionner avec Github. Une autre solution que j'ai trouvée est de créer une tâche de râteau, qui générera des pages de redirection. Mais comme c'est un html, il n'est pas en mesure d'envoyer 301 head, donc les robots d'exploration SE ne le reconnaîtront pas comme une redirection.

70
Mailo Světel

La meilleure solution consiste à utiliser les deux <meta http-equiv="refresh" et <link rel="canonical" href=

Cela fonctionne très bien, Google Bot a réindexé tout mon site Web sous de nouveaux liens sans perdre de position. Les utilisateurs sont également redirigés vers les nouveaux messages immédiatement.

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

En utilisant <meta http-equiv="refresh" redirigera chaque visiteur vers le nouveau message. Quant à Google Bot, il traite <link rel="canonical" href= comme redirection 301, l'effet est que vous obtenez vos pages réindexées et c'est ce que vous voulez.

J'ai décrit tout le processus de transfert de mon blog de Wordpress vers Octopress ici. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated- my-blog-from-wordpress-to-octopress/# redirect-301-on-github-pages

63
Konrad Podgórski

Avez-vous essayé le plugin Jekyll Alias ​​Generator ?

Vous mettez les alias d'URL dans la première page YAML d'un post:

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

Lorsqu'un utilisateur visite l'une des URL d'alias, il est redirigé vers l'URL principale via une actualisation de la balise 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>

Voir aussi cet article de blog sur le sujet.

21
ms-ati

Cette solution vous permet d'utiliser de véritables redirections HTTP via .htaccess - cependant, rien impliquant .htaccess ne fonctionnera sur les pages GitHub car elles n'utilisent pas Apache.

En date de mai 2014 les pages GitHub prennent en charge les redirections , mais selon la documentation jekyll-redirect-from Gem elles sont toujours basées sur HTTP-REFRESH ( en utilisant <meta> tags), ce qui nécessite un chargement complet de la page avant que la redirection puisse se produire.

Je n'aime pas le <meta> j'ai donc élaboré une solution pour quiconque cherche à fournir de véritables redirections HTTP 301 dans un fichier .htaccess à l'aide d'Apache, qui dessert un site Jekyll pré-généré:


Tout d'abord, ajoutez .htaccess à la propriété include dans _config.yml

include: [.htaccess]

Ensuite, créez un fichier .htaccess et assurez-vous d'inclure avant-propos YAML . Ces tirets sont importants car maintenant Jekyll analysera le fichier avec Liquid, le langage de template de Jekyll:

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

Assurez-vous que vos publications qui nécessitent des redirections ont deux propriétés comme ceci:

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

Maintenant, en .htaccess, ajoutez simplement une boucle:

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

Cela générera dynamiquement .htaccess chaque fois que vous construirez le site, et le include dans votre fichier de configuration garantit que .htaccess en fait _site répertoire.

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

À partir de là, c'est à vous de servir _site en utilisant Apache. Normalement, je clone le dépôt complet de Jekyll dans un répertoire non webroot, puis mon vhost est un lien symbolique vers le _site dossier:

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

Tada! Apache peut désormais servir le dossier _site à partir de votre racine virtuelle, avec des redirections alimentées par .htaccess qui utilisent le code de réponse HTTP que vous désirez!

Vous pouvez même obtenir une super fantaisie et utiliser une propriété redirect dans le sujet de chaque article pour désigner le code de redirection à utiliser dans votre boucle .htaccess.

11
Chris Ruppel

plug-in de redirection

https://github.com/jekyll/jekyll-redirect-from#redirect-to

Il est pris en charge par GitHub et facilite:

_config.yml

gems:
  - jekyll-redirect-from

a.md

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

comme expliqué sur: https://help.github.com/articles/redirects-on-github-pages/

Maintenant:

firefox localhost:4000/a

vous redirigera vers example.com.

Le plugin prend le relais chaque fois que le redirect_to est défini par la page.

Testé sur les pages GitHub v64.

Remarque: cette version a un grave bug récemment corrigé qui réutilise à tort la disposition par défaut pour la redirection: https://github.com/jekyll/jekyll-redirect-from/pull/106

Méthode de mise en page manuelle

Si vous n'avez pas envie d'utiliser https://github.com/jekyll/jekyll-redirect-from il est facile de l'implémenter vous-même:

a.md

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

_layouts/redirect.html basé sur Rediriger depuis une page 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>

Comme cet exemple, le redirect-from le plugin ne génère pas 301s, seulement meta + redirections JavaScript.

Nous pouvons vérifier ce qui se passe avec:

curl localhost:4000/a

La meilleure option consiste à éviter complètement les changements d'URL en définissant le format de permalien dans _config.yml pour correspondre à votre ancien blog.

Au-delà de cela, la solution la plus complète consiste à générer des pages de redirection, mais ne vaut pas nécessairement l'effort. J'ai fini par rendre ma page 404 un peu plus conviviale, avec javascript pour deviner la nouvelle URL correcte. Il ne fait rien pour la recherche, mais les utilisateurs réels peuvent accéder à la page qu'ils recherchaient et il n'y a aucun élément hérité à prendre en charge dans le reste du code.

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

5
Tom Clarkson

Étant donné que github n'autorise pas les redirections 301 (ce qui n'est pas surprenant), vous devrez prendre une décision entre passer à votre nouvelle structure d'URL (et prendre un hit de moteur de recherche) ou laisser les URL telles qu'elles sont. Je vous suggère d'aller de l'avant et de faire le pas. Laissez les puces des moteurs de recherche tomber où elles le peuvent. Si quelqu'un accède à l'un de vos anciens liens via le moteur de recherche, il sera redirigé vers le nouvel emplacement. Au fil du temps, les moteurs de recherche reprendront vos modifications.

Quelque chose que vous pouvez faire pour aider les choses est de créer un Sitemap où vous ne listez que vos nouvelles pages et non les anciennes. Cela devrait accélérer le remplacement des anciennes URL par les nouvelles. De plus, si toutes vos anciennes URL se trouvent dans votre répertoire '/ programovani', vous pouvez également utiliser un fichier robots.txt pour indiquer aux futures analyses qu'elles devraient ignorer ce répertoire. Par exemple:

User-agent: *
Disallow: /programovani/

Il faudra un peu de temps aux moteurs de recherche pour rattraper les changements. Ce n'est pas vraiment un gros problème. Tant que les anciennes URL existent toujours et redirigent les personnes réelles vers les pages actives, tout ira bien.

2
Alan W. Smith

Comme d'autres l'ont mentionné, la meilleure solution consiste à conserver les URL de travail ou à dupliquer les pages et à spécifier une URL canonique .

Étant donné que les pages github ne prennent pas en charge les véritables redirections, j'ai choisi de configurer rerouter sur Heroku pour renvoyer 301 redirections (permanentes) de l'ancien domaine de mon site vers le nouveau. J'ai décrit les détails ici:

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

1
Joey

Jekyll a subi des mises à jour majeures au cours des derniers mois, alors ce n'était peut-être pas possible lorsque cette question a été initialement publiée ...

Jekyll prend en charge un attribut permalink dans la section YAML front-matter de vos articles de blog. Vous pouvez spécifier l'URL que vous souhaitez que votre publication ait et Jekyll l'utilisera (au lieu du nom de fichier) lors de la génération de votre site.

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