Cách tiếp cận tốt nhất để chuyển hướng các trang cũ trong Trang Jekyll và GitHub là gì?


77

Tôi có blog trên trang github - jekyll

Cách tốt nhất để giải quyết việc di chuyển chiến lược url là gì?

Tôi thấy điểm chung tốt nhất là tạo htaccess như vậy

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

Nhưng nó dường như không hoạt động với Github. Một giải pháp khác mà tôi tìm thấy là tạo tác vụ rake, tác vụ này sẽ tạo ra các trang chuyển hướng. Nhưng vì nó là một html, nó không thể gửi 301head, vì vậy các trình thu thập dữ liệu của SE sẽ không nhận ra nó là một chuyển hướng.


2
Điều này làm việc cho tôi: help.github.com/articles/redirects-on-github-pages
Mike Cole

Câu trả lời:


69

Giải pháp tốt nhất là sử dụng cả hai <meta http-equiv="refresh"<link rel="canonical" href=

Nó hoạt động rất tốt, Google Bot đã lập chỉ mục lại toàn bộ trang web của tôi theo các liên kết mới mà không bị mất vị trí. Ngoài ra, người dùng được chuyển hướng đến các bài viết mới ngay lập tức.

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

Việc sử dụng <meta http-equiv="refresh"sẽ chuyển hướng mỗi khách truy cập đến bài viết mới. Đối với Google Bot, nó xử lý<link rel="canonical" href= là chuyển hướng 301, tác dụng là bạn đưa các trang của mình được lập chỉ mục lại và đó là những gì bạn muốn.

Tôi đã mô tả toàn bộ quá trình chuyển blog của mình từ Wordpress sang Octopress ở đây. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages


5
Khi chuyển sang các trang GitHub, điều này phù hợp với tôi: help.github.com/articles/redirects-on-github-pages . Có vẻ như nó thực hiện mọi thứ bạn đã đề cập.
Mike Cole

Có phải tác dụng của việc sử dụng canonicalngụ ý rằng Google sẽ lập chỉ mục lại các trang từ đầu hay nó chuyển điểm xếp hạng sang trang mới? Bạn có thể làm rõ cách tiếp cận này ảnh hưởng đến xếp hạng trang không?
Yuri

Sẽ không <meta http-equiv="refresh"gây ra một vòng lặp chuyển hướng vô hạn? Đó là những gì tôi đang nhận được, có lẽ tôi đang làm gì đó sai?
Erik Berkun-Drevnig

3
@ ErikBerkun-Drevnig nội dung nhìn thấy ở trên được thêm vào trang "cũ" và phải trỏ đến trang "mới". Thực hiện theo cách đó, không nên có một vòng lặp vô hạn.
vossad01

Nếu ai đó đang thắc mắc: hai dòng đó nên được đưa vào <head>khối của bạn .
stragu

23

Bạn đã thử plugin Jekyll Alias ​​Generator chưa?

Bạn đặt các url bí danh trong YAML của bài đăng:

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

Khi người dùng truy cập một trong các url bí danh, họ sẽ được chuyển hướng đến url chính thông qua làm mới thẻ 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>

Xem thêm bài đăng trên blog này về chủ đề.


3
GitHub trang không sử dụng plugin
tekknolagi

@tekknolagi Có lẽ tôi không hiểu Trang GitHub. Nhưng nếu bạn đang chạy jekyll và chỉ đăng trang web tĩnh lên Github, thì điều này sẽ hoạt động, vì các trang được tạo sẽ bao gồm làm mới meta cho các url cũ?
ms-ati

đó là chính xác, nhưng GitHub sẽ không chạy Jekyll với các plugin, chỉ phục vụ cho việc biên soạn tĩnh trang web
tekknolagi

2
Tôi đã kết thúc với một cái gì đó như thế này. Tôi tạo ra các trang chuyển hướng địa phương bởi nhiệm vụ Rake và đẩy họ Github như các trang tĩnh
Mailo Světel

Tôi đã làm theo cách tiếp cận này và nó khá dễ dàng. Tôi gặp phải hai vấn đề: 1) plugin không chạy - tôi phải đặt safe: false_config.yml2) Tôi sẽ phải tạo hơn 400 mục bí danh. Thay vì làm thủ công những thứ đó, tôi đã tự động hóa nó bằng một tập lệnh Python: gist.github.com/smholloway/8726873
smholloway

11

chuyển hướng-từ plugin

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

Nó được GitHub hỗ trợ và giúp bạn dễ dàng:

_config.yml

gems:
  - jekyll-redirect-from

a.md

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

như được giải thích tại: https://help.github.com/articles/redirects-on-github-pages/

Hiện nay:

firefox localhost:4000/a

sẽ chuyển hướng bạn đến example.com.

Plugin tiếp quản bất cứ khi nào redirect_tođược xác định bởi trang.

Đã thử nghiệm trên các trang GitHub v64.

Lưu ý : phiên bản này có một lỗi nghiêm trọng đã được sửa gần đây sử dụng sai bố cục mặc định cho chuyển hướng: https://github.com/jekyll/jekyll-redirect-from/pull/106

Phương pháp bố trí thủ công

Nếu bạn không muốn sử dụng https://github.com/jekyll/jekyll-redirect-from , bạn có thể dễ dàng tự thực hiện:

a.md

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

_layouts/redirect.htmldựa trên Chuyển hướng từ một trang 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>

Giống như ví dụ này, redirect-fromplugin không tạo metachuyển hướng 301 mà chỉ tạo + chuyển hướng JavaScript.

Chúng tôi có thể xác minh những gì đang xảy ra với:

curl localhost:4000/a

9

Giải pháp này cho phép bạn sử dụng chuyển hướng HTTP thực qua .htaccess - tuy nhiên, không có gì liên quan đến .htaccess sẽ hoạt động trên các trang GitHub vì chúng không sử dụng Apache.

Kể từ tháng 5 năm 2014, các Trang GitHub hỗ trợ chuyển hướng , nhưng theo tài liệu jekyll-redirect-from Gem thì chúng vẫn dựa trên HTTP-REFRESH (sử dụng <meta>thẻ), yêu cầu tải trang đầy đủ trước khi chuyển hướng có thể xảy ra.

Tôi không thích <meta>cách tiếp cận này, vì vậy tôi đã đưa ra giải pháp cho bất kỳ ai muốn cung cấp chuyển hướng HTTP 301 thực trong tệp .htaccess bằng Apache, phục vụ trang web Jekyll được tạo trước:


Đầu tiên, thêm .htaccessvào thuộc includetính trong_config.yml

include: [.htaccess]

Tiếp theo, tạo tệp .htaccess và đảm bảo bao gồm vấn đề phía trước YAML . Những dấu gạch ngang đó rất quan trọng vì bây giờ Jekyll sẽ phân tích cú pháp tệp bằng Liquid, ngôn ngữ tạo mẫu của Jekyll:

---
---
DirectoryIndex index.html

RewriteEngine On
RewriteBase /

...

Đảm bảo rằng các bài đăng của bạn yêu cầu chuyển hướng có hai thuộc tính như sau:

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

Bây giờ trong .htaccess, chỉ cần thêm một vòng lặp:

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

Thao tác này sẽ tự động tạo .htaccess mỗi khi bạn xây dựng trang web và includetệp cấu hình trong tệp của bạn đảm bảo rằng .htaccess biến nó thành_site thư mục.

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

Từ đó, _siteviệc sử dụng Apache tùy thuộc vào bạn . Tôi thường sao chép repo Jekyll đầy đủ vào một thư mục không phải webroot, sau đó vhost của tôi là một liên kết tượng trưng đến_site thư mục:

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

Tada! Giờ đây, Apache có thể phục vụ thư mục _site từ thư mục gốc ảo của bạn, hoàn chỉnh với các chuyển hướng được hỗ trợ bởi .htaccess sử dụng bất kỳ mã phản hồi HTTP nào bạn muốn!

Bạn thậm chí có thể trở nên cực kỳ ưa thích và sử dụng một redirectthuộc tính trong mỗi vấn đề của bài đăng để chỉ định mã chuyển hướng nào sẽ sử dụng trong vòng lặp .htaccess của bạn.


Điều này có vẻ tuyệt vời! Nhưng điều gì sẽ xảy ra nếu có nhiều liên kết ban đầu (liên kết trước đó hiện đạt 404) cho một bài đăng?
Sharath kumar

2
Giải pháp sẽ liên quan đến một đoạn logic phức tạp hơn khi bạn tạo .htaccesstệp. Ví dụ: bạn có thể chuyển đổi YAML để đó originallà một mảng thay vì một chuỗi. Sau đó, bạn cần một vòng lặp lồng nhau để mọi originalmục nhập tạo chuyển hướng đến permalink. Hãy lấy mã này làm điểm bắt đầu và thử nghiệm cho chính bạn!
Chris Ruppel

Cảm ơn bạn. Tôi đã làm cho nó hoạt động như bạn đề nghị. Tôi đã sử dụng phương pháp này cho một hướng dẫn.
Sharath kumar

2
vì giải pháp này không hoạt động trên các trang GitHub, nên nó không trả lời bất kỳ câu hỏi nào. Số lượng câu trả lời không liên quan là vô hạn, vậy tại sao lại đăng cái này?
Corey Goldberg

@CoreyGoldberg chủ yếu để cung cấp cho những người như bạn gì đó để nhận xét về;)
Chris Ruppel

5

Tùy chọn tốt nhất là tránh thay đổi hoàn toàn url bằng cách đặt định dạng liên kết cố định trong _config.yml để khớp với blog cũ của bạn.

Ngoài ra, giải pháp hoàn chỉnh nhất là tạo các trang chuyển hướng, nhưng không nhất thiết phải nỗ lực. Cuối cùng, tôi chỉ đơn giản là làm cho trang 404 của mình thân thiện hơn một chút, với javascript để đoán đúng url mới. Nó không làm bất cứ điều gì cho tìm kiếm, nhưng người dùng thực tế có thể truy cập trang họ đang tìm kiếm và không có nội dung kế thừa nào để hỗ trợ trong phần còn lại của mã.

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


2

Vì github không cho phép chuyển hướng 301 (điều này không có gì đáng ngạc nhiên), bạn sẽ phải đưa ra quyết định giữa việc chuyển sang cấu trúc URL mới của mình (và thực hiện một lần truy cập công cụ tìm kiếm) hoặc để nguyên URL. Tôi khuyên bạn nên tiếp tục và thực hiện. Hãy để các chip của công cụ tìm kiếm rơi xuống nơi chúng có thể. Nếu ai đó truy cập vào một trong các liên kết cũ của bạn thông qua công cụ tìm kiếm, họ sẽ được chuyển hướng đến vị trí mới. Theo thời gian, các công cụ tìm kiếm sẽ nhận các thay đổi của bạn.

Điều bạn có thể làm để giúp ích cho vấn đề là tạo Sơ đồ trang web nơi bạn chỉ liệt kê các trang mới chứ không liệt kê các trang cũ. Điều này sẽ tăng tốc độ thay thế các URL cũ bằng URL mới. Ngoài ra, nếu tất cả các URL cũ của bạn đều nằm trong thư mục '/ Programovani' của bạn, bạn cũng có thể sử dụng tệp robots.txt để thông báo cho các lần thu thập thông tin trong tương lai rằng họ nên bỏ qua thư mục đó. Ví dụ:

User-agent: *
Disallow: /programovani/

Sẽ mất một chút thời gian để các công cụ tìm kiếm bắt kịp những thay đổi. Đây không thực sự là một vấn đề lớn. Miễn là các URL cũ vẫn tồn tại và chuyển hướng những người thực sự đến các trang đang hoạt động, bạn sẽ ổn.


SE không phải là thứ khiến tôi bận tâm. Tôi nhận được 404 bởi các liên kết từ các trang / diễn đàn khác. Tôi đã tạo các trang giả mạo không có thời gian làm mới sẽ "chuyển hướng" người dùng. Tôi đã thử nghiệm nó trong các công cụ quản trị trang web và có vẻ như trình thu thập thông tin cũng hài lòng với điều đó. Nhưng tôi không;)
Mailo Světel

Nếu bạn vẫn gặp sự cố với lỗi 404, hãy bắn cho tôi liên kết đến một trong số chúng và tôi sẽ xem xét và xem liệu tôi có thể biết được điều gì đang xảy ra hay không.
Alan W. Smith,

Ngay bây giờ tôi đã giải quyết nó bằng các trang giả mạo. Một trong số 404 trước đây là rooland.cz/programovani/2010/04/git-co-to-je-a-co-s-tim . Tôi đang tạo chúng bằng git.io/UrlZaQ này . Kịch bản là khủng khiếp, nhưng nó làm những gì tôi cần
Mailo Světel

1

Như những người khác đã đề cập, giải pháp tốt nhất là giữ nguyên các URL đang hoạt động hoặc sao chép các trang và chỉ định một URL chuẩn .

Vì các trang github không hỗ trợ chuyển hướng thực sự, tôi đã chọn thiết lập rerouter trên Heroku để trả lại các chuyển hướng 301 (vĩnh viễn) từ miền cũ của trang web của tôi sang miền mới. Tôi đã mô tả chi tiết ở đây:

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


Điều này có hỗ trợ các chuyển hướng phức tạp hơn không? Chẳng hạn như với một tên miền nếu tôi muốn chuyển hướng các liên kết example.com/index.htmlđến example.comhoặc example.com/some-post/index.htmlđến example.com/some-post/.
Erik Berkun-Drevnig

1

Jekyll đã trải qua một số cập nhật lớn trong vài tháng qua, vì vậy có lẽ điều này không thể xảy ra khi câu hỏi này được đăng ban đầu ...

Jekyll hỗ trợ một permalinkthuộc tính trong phần YAML front-matter của các bài đăng trên blog của bạn. Bạn có thể chỉ định URL mà bạn muốn bài đăng của mình có và Jekyll sẽ sử dụng URL đó (thay vì tên tệp) khi tạo trang web của bạn.

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

1
Thuộc tính permalink chỉ cho jekyll biết cách tạo URL mới được tạo, nhưng không cung cấp bất kỳ điều gì về cách chuyển hướng cho cấu trúc liên kết cố định cũ có thể đã có trước đó.
Joel Glovier

Ý bạn là chuyển hướng các trang cũ trên trang cũ? Như đây là lần thứ ba chuyển trang?
Andrew
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.