Was ist der beste Ansatz für die Umleitung alter Seiten in Jekyll- und GitHub-Seiten?

76

Ich habe einen Blog auf Github-Seiten - Jekyll

Was ist der beste Weg, um die Migration der URL-Strategie zu lösen?

Ich fand, dass die beste Vorgehensweise darin besteht, einen solchen Zugriff zu erstellen

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

Aber es scheint nicht mit Github zu funktionieren. Eine andere Lösung, die ich gefunden habe, ist das Erstellen einer Rechenaufgabe, die Umleitungsseiten generiert. Da es sich jedoch um ein HTML handelt, kann es keinen 301Kopf senden , sodass SE-Crawler ihn nicht als Umleitung erkennen.

Mailo Světel
quelle
2
Dies funktionierte für mich: help.github.com/articles/redirects-on-github-pages
Mike Cole

Antworten:

68

Die beste Lösung ist, beide <meta http-equiv="refresh"und zu verwenden<link rel="canonical" href=

Es funktioniert sehr gut, Google Bot hat meine gesamte Website unter neuen Links neu indiziert, ohne Positionen zu verlieren. Außerdem werden die Benutzer sofort zu den neuen Posts weitergeleitet.

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

Mit <meta http-equiv="refresh"wird jeder Besucher auf den neuen Beitrag umgeleitet. Google Bot wird <link rel="canonical" href=als 301-Weiterleitung behandelt . Dies hat zur Folge, dass Sie Ihre Seiten neu indizieren und genau das möchten.

Ich habe hier den gesamten Prozess beschrieben, wie ich mein Blog von Wordpress auf Octopress verschoben habe. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages

Konrad Podgórski
quelle
5
Beim Wechsel zu GitHub-Seiten hat dies für mich funktioniert : help.github.com/articles/redirects-on-github-pages . Es sieht so aus, als würde es alles tun, was Sie erwähnt haben.
Mike Cole
Bedeutet der Effekt der Verwendung canonical, dass Google die Seiten von Grund auf neu indiziert, oder überträgt es den Ranking-Score auf die neue Seite? Können Sie klarstellen, wie sich dieser Ansatz auf das Seitenranking auswirkt?
Yuri
Wird die <meta http-equiv="refresh"Ursache nicht eine Endlosumleitungsschleife sein? Das bekomme ich, vielleicht mache ich etwas falsch?
Erik Berkun-Drevnig
3
@ ErikBerkun-Drevnig Der oben gezeigte Inhalt wird auf der "alten" Seite hinzugefügt und sollte auf die "neue" Seite verweisen. Auf diese Weise sollte es keine Endlosschleife geben.
Vossad01
Wenn sich jemand wundert: Diese beiden Zeilen sollten in Ihrem <head>Block enthalten sein.
Stragu
22

Haben Sie das Jekyll Alias ​​Generator Plugin ausprobiert ?

Sie haben die Alias-URLs in die YAML-Titelseite eines Posts eingefügt:

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

Wenn ein Benutzer eine der Alias-URLs besucht, wird er über eine Meta-Tag-Aktualisierung zur Haupt-URL umgeleitet:

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

Siehe auch diesen Blog-Beitrag zu diesem Thema.

ms-ati
quelle
3
GitHub Pages verwendet keine Plugins
tekknolagi
@tekknolagi Vielleicht verstehe ich GitHub Pages nicht. Aber wenn Sie jekyll ausführen und nur die statische Site auf Github veröffentlichen, würde dies funktionieren, da die generierten Seiten Meta-Aktualisierungen für die alten URLs enthalten würden?
ms-ati
Das ist richtig, aber GitHub wird Jekyll nicht mit den Plugins ausführen, sondern nur die kompilierte statische Site bedienen
bedienen
2
Ich habe so etwas bekommen. Ich generiere die Umleitungsseiten lokal per Rake-Task und schiebe sie als statische Seiten an Github
Mailo Světel
Ich folgte diesem Ansatz und es war ziemlich einfach. Ich lief in zwei Fragen: 1) das Plugin nicht laufen - ich musste Satz safe: falsein _config.yml2) Ich würde 400 Alias - Einträge erstellen muß über. Anstatt diese von Hand zu erstellen
smholloway
11

Redirect-from-Plugin

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

Es wird von GitHub unterstützt und macht es einfach:

_config.yml

gems:
  - jekyll-redirect-from

a.md

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

wie unter https://help.github.com/articles/redirects-on-github-pages/ erklärt

Jetzt:

firefox localhost:4000/a

leitet Sie weiter zu example.com.

Das Plugin übernimmt immer dann, wenn das redirect_tovon der Seite definiert wird.

Getestet auf GitHub-Seiten v64.

Hinweis : Diese Version hat einen schwerwiegenden kürzlich behobenen Fehler, der das Standardlayout für die Umleitung fälschlicherweise wiederverwendet: https://github.com/jekyll/jekyll-redirect-from/pull/106

Manuelle Layoutmethode

Wenn Sie keine Lust haben zu verwenden https://github.com/jekyll/jekyll-redirect-from zu verwenden, können Sie es einfach selbst implementieren:

a.md

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

_layouts/redirect.htmlbasierend auf Weiterleiten von einer HTML-Seite :

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

Wie in diesem Beispiel ist die redirect-from generiert Plugin keine 301s, sondern nur meta+ JavaScript-Weiterleitungen.

Wir können überprüfen, was los ist mit:

curl localhost:4000/a
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
10

Mit dieser Lösung können Sie echte HTTP-Weiterleitungen über .htaccess verwenden. Auf GitHub-Seiten funktioniert jedoch nichts mit .htaccess, da sie keinen Apache verwenden.

Ab Mai 2014 unterstützt GitHub Pages Weiterleitungen , aber laut der Dokumentation zu jekyll-redirect-from Gem basieren sie immer noch auf HTTP-REFRESH (unter Verwendung von <meta>Tags), für das eine vollständige Seitenladung erforderlich ist, bevor eine Umleitung erfolgen kann.

Der <meta>Ansatz gefällt mir nicht, daher habe ich eine Lösung für alle entwickelt, die mithilfe von Apache, das eine vorgenerierte Jekyll-Site bereitstellt, echte HTTP 301-Weiterleitungen in einer .htaccess-Datei bereitstellen möchten:


Fügen Sie .htaccesszunächst der includeEigenschaft in hinzu_config.yml

include: [.htaccess]

Erstellen Sie als Nächstes eine .htaccess-Datei und stellen Sie sicher, dass YAML-Frontmaterie enthalten ist . Diese Striche sind wichtig, da Jekyll jetzt die Datei mit Liquid, Jekylls Vorlagensprache, analysiert:

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

Stellen Sie sicher, dass Ihre Posts, für die Weiterleitungen erforderlich sind, zwei Eigenschaften haben:

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

Fügen Sie jetzt in .htaccess einfach eine Schleife hinzu:

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

Dadurch wird jedes Mal, wenn Sie die Site erstellen, dynamisch .htaccess generiert, und includein Ihrer Konfigurationsdatei wird sichergestellt, dass .htaccess in das _siteVerzeichnis aufgenommen wird.

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

Von dort aus liegt es an Ihnen, _sitemit Apache zu dienen . Normalerweise klone ich das vollständige Jekyll-Repo in ein Nicht-Webroot-Verzeichnis, dann ist mein vhost ein Symlink zum _siteOrdner:

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

Tada! Jetzt kann Apache den Ordner _site von Ihrem virtuellen Stammverzeichnis aus bereitstellen, einschließlich Weiterleitungen mit .htaccess-Unterstützung, die den gewünschten HTTP-Antwortcode verwenden!

Sie könnten sogar super schick werden und eine redirectEigenschaft in der Titelseite jedes Posts verwenden, um zu bestimmen, welcher Umleitungscode in Ihrer .htaccess-Schleife verwendet werden soll.

Chris Ruppel
quelle
Das scheint großartig! Aber was ist, wenn es mehrere Original-Links (frühere Links treffen jetzt auf 404) für einen Beitrag gibt?
Sharath Kumar
2
Die Lösung würde eine komplexere Logik beinhalten, wenn Sie die .htaccessDatei generieren . Sie können beispielsweise die YAML so konvertieren, dass sie originalein Array anstelle einer Zeichenfolge ist. Dann benötigen Sie eine verschachtelte Schleife, damit jeder originalEintrag eine Umleitung zu generiert permalink. Nehmen Sie diesen Code als Ausgangspunkt und experimentieren Sie selbst!
Chris Ruppel
Vielen Dank. Ich habe es zum Laufen gebracht, wie Sie vorgeschlagen haben. Ich habe diese Methode für ein Tutorial verwendet.
Sharath Kumar
2
Da diese Lösung auf GitHub-Seiten nicht funktioniert, beantwortet sie die Frage überhaupt nicht. Die Anzahl der irrelevanten Antworten ist unendlich. Warum also überhaupt posten?
Corey Goldberg
@CoreyGoldberg hauptsächlich, um Leuten wie Ihnen etwas zu kommentieren;)
Chris Ruppel
5

Die beste Option ist, URL-Änderungen insgesamt zu vermeiden, indem Sie das Permalink-Format in _config.yml so einstellen, dass es mit Ihrem alten Blog übereinstimmt.

Darüber hinaus besteht die vollständigste Lösung darin, Weiterleitungsseiten zu generieren, die sich jedoch nicht unbedingt lohnen. Am Ende habe ich meine 404-Seite einfach ein bisschen freundlicher gemacht, mit Javascript, um die richtige neue URL zu erraten. Es wird nichts für die Suche getan, aber tatsächliche Benutzer können zu der Seite gelangen, nach der sie gesucht haben, und es gibt keine älteren Dinge, die im Rest des Codes unterstützt werden könnten.

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

Tom Clarkson
quelle
2

Da Github keine 301-Weiterleitungen zulässt (was nicht überraschend ist), müssen Sie eine Entscheidung treffen, ob Sie zu Ihrer neuen URL-Struktur wechseln (und einen Suchmaschinentreffer ausführen) oder die URLs so lassen, wie sie sind. Ich schlage vor, Sie machen den Schritt. Lassen Sie die Suchmaschinen-Chips fallen, wo sie können. Wenn jemand über die Suchmaschine auf einen Ihrer alten Links trifft, wird er an den neuen Ort weitergeleitet. Im Laufe der Zeit werden die Suchmaschinen Ihre Änderungen übernehmen.

Sie können eine Sitemap erstellen, in der Sie nur Ihre neuen und nicht die alten Seiten auflisten. Dies sollte das Ersetzen alter URLs durch neue beschleunigen. Wenn sich alle Ihre alten URLs in Ihrem Verzeichnis '/ programovani' befinden, können Sie auch eine robots.txt-Datei verwenden , um zukünftigen Crawls mitzuteilen, dass sie dieses Verzeichnis ignorieren sollen. Zum Beispiel:

User-agent: *
Disallow: /programovani/

Es wird eine Weile dauern, bis die Suchmaschinen mit den Änderungen Schritt halten. Das ist keine große Sache. Solange die alten URLs noch vorhanden sind und tatsächliche Personen auf die aktiven Seiten umleiten, ist alles in Ordnung.

Alan W. Smith
quelle
SE stört mich nicht. Ich erhalte 404 durch Links von anderen Websites / Foren. Ich habe gefälschte Seiten ohne Aktualisierungszeit erstellt, die den Benutzer "umleiten". Ich habe es in Webmaster-Tools getestet und es scheint, dass Crawler auch damit zufrieden ist. Aber ich bin nicht;)
Mailo Světel
Wenn Sie immer noch Probleme mit 404-Fehlern haben, schreiben Sie mir einen Link zu einem von ihnen, und ich werde nachsehen, ob ich sagen kann, was los ist.
Alan W. Smith
Im Moment habe ich es durch die gefälschten Seiten gelöst. Einer der ehemaligen 404 war rooland.cz/programovani/2010/04/git-co-to-je-a-co-s-tim . Ich generiere sie mit diesem git.io/UrlZaQ . Das Skript ist schrecklich, aber es macht, was ich brauche
Mailo Světel
1

Wie bereits erwähnt, besteht die beste Lösung darin, funktionierende URLs beizubehalten oder die Seiten zu duplizieren und eine kanonische URL anzugeben .

Da Github-Seiten keine echten Weiterleitungen unterstützen, habe ich mich entschieden, eine Umleitung auf Heroku einzurichten , um 301 (permanente) Weiterleitungen von der alten Domain meiner Site zur neuen zurückzugeben. Ich habe die Details hier beschrieben:

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

Joey
quelle
Würde dies komplexere Weiterleitungen unterstützen? Wie mit einer einzelnen Domäne , wenn ich Links umleiten wie wollte example.com/index.htmlauf example.comoder example.com/some-post/index.htmlzu example.com/some-post/.
Erik Berkun-Drevnig
1

Jekyll hat in den letzten Monaten einige wichtige Updates durchlaufen. Vielleicht war dies nicht möglich, als diese Frage ursprünglich gestellt wurde ...

Jekyll unterstützt ein permalinkAttribut im YAML-Front-Matter-Bereich Ihrer Blog-Beiträge. Sie können die URL angeben, die Ihr Beitrag haben soll, und Jekyll verwendet diese (anstelle des Dateinamens) beim Generieren Ihrer Website.

---
title: My special blog post
permalink: /programovani/2010/04/git-co-to-je-a-co-s-tim
---
My blog post markdown content
Andrew
quelle
1
Das Permalink-Attribut teilt Jekyll nur mit, wie die neu generierte URL erstellt werden soll, bietet jedoch keine Weiterleitungen für alte Permalink-Strukturen, die möglicherweise zuvor vorhanden waren.
Joel Glovier
Sie meinen Weiterleitungen alter Seiten auf der alten Site? So wurde die Seite zum dritten Mal verschoben?
Andrew