web-dev-qa-db-ja.com

JekyllおよびGitHub Pagesの古いページのリダイレクトに最適なアプローチは何ですか?

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であるため、301head。SEクローラーはリダイレクトとして認識しません。

70
Mailo Světel

最善の解決策は、<meta http-equiv="refresh"<link rel="canonical" href=の両方を使用することです

Google Botは、位置を失うことなく、新しいリンクの下でWebサイト全体のインデックスを再作成しました。また、ユーザーはすぐに新しい投稿にリダイレクトされます。

<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

63

Jekyll Alias Generatorプラグイン を試しましたか?

投稿のYAMLフロントマターにエイリアスURLを配置します。

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

ユーザーがエイリアスURLの1つにアクセスすると、メタタグの更新を介してメイン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>

この件については このブログ投稿 もご覧ください。

21
ms-ati

このソリューションでは、.htaccessを介して真のHTTPリダイレクトを使用できますが、Apacheを使用しないため、GitHubページでは.htaccessに関係するものは何も動作しません。

2014年5月現在 GitHub Pagesはリダイレクトをサポートしています ですが、 Gemドキュメントからのjekyll-redirect-from によれば、これらは依然として HTTP-REFRESH<meta>タグを使用します)、リダイレクトが発生する前にページを完全にロードする必要があります。

私は<meta>アプローチが好きではないので、事前に生成されたJekyllサイトを提供するApacheを使用して、.htaccessファイル内で実際のHTTP 301リダイレクトを提供したい人のためのソリューションを作成しました。


最初に、.htaccessincludeプロパティに_config.ymlを追加します

include: [.htaccess]

次に、.htaccessファイルを作成し、必ず YAMLフロントマター を含めてください。 JekyllはJekyllのテンプレート言語であるLiquidでファイルを解析するため、これらのダッシュは重要です。

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

リダイレクトを必要とする投稿には、次のような2つのプロパティがあることを確認してください。

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

そこから、Apacheを使用して_siteを提供するのはあなた次第です。通常、完全なJekyllリポジトリを非webrootディレクトリに複製すると、vhostは_siteフォルダーへのシンボリックリンクになります。

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

多田!これで、Apacheは仮想ルートから_siteフォルダーを提供でき、必要なHTTP応答コードを使用する.htaccess-poweredリダイレクトを完了できます!

さらに、各投稿の前件内でredirectプロパティを使用して、.htaccessループで使用するリダイレクトコードを指定することもできます。

11
Chris Ruppel

redirect-fromプラグイン

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

最適なオプションは、古いブログに一致するように_config.ymlのパーマリンク形式を設定して、URLの変更を完全に回避することです。

さらに、最も完全なソリューションはリダイレクトページを生成することですが、必ずしも努力する価値はありません。正しい新しいURLを推測するJavaScriptを使用して、404ページを少し使いやすくしました。検索に対しては何もしませんが、実際のユーザーは探しているページにアクセスできます。残りのコードでは、サポートするレガシーなものはありません。

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

5
Tom Clarkson

Githubでは301リダイレクトが許可されていないため(これは驚くことではありません)、新しいURL構造に移動する(および検索エンジンをヒットさせる)か、URLをそのままにするかを決定する必要があります。先に進んで移動することをお勧めします。検索エンジンチップをどこにでも落下させます。誰かが検索エンジンを介して古いリンクのいずれかにヒットすると、それらは新しい場所にリダイレクトされます。時間が経つにつれて、検索エンジンが変更をピックアップします。

問題を解決するためにできることは、古いページではなく新しいページのみをリストする Sitemap を作成することです。これにより、古いURLから新しいURLへの置き換えが高速化されます。さらに、古いURLがすべて「/ programovani」ディレクトリにある場合は、 robots.txtファイル を使用して、将来のクロールにそのディレクトリを無視するよう指示することもできます。例えば:

User-agent: *
Disallow: /programovani/

検索エンジンが変更に追いつくには少し時間がかかります。これは本当に大したことではありません。古いURLがまだ存在し、実際のユーザーをアクティブなページにリダイレクトする限り、問題ありません。

2
Alan W. Smith

他の人が述べたように、最良の解決策は、作業URLを保持するか、ページを複製し、 正規 URLを指定することです。

Githubページは真のリダイレクトをサポートしていないため、Herokuで rerouter を設定して、サイトの古いドメインから新しいドメインへの301(永続的な)リダイレクトを返すことにしました。ここで詳細を説明しました。

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

1
Joey

Jekyllは過去数か月間にいくつかの主要な更新を行ったため、この質問が最初に投稿されたときにはこれが不可能だったかもしれません...

Jekyllは、ブログ投稿の YAMLフロントマターセクションpermalink属性をサポートしています。投稿に含めるURLを指定すると、Jekyllはサイトを生成するときに(ファイル名ではなく)そのURLを使用します。

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