What is the best approach for redirection of old pages in Jekyll and GitHub Pages?

前端 未结 8 504
萌比男神i
萌比男神i 2020-12-07 09:38

I have blog on github pages - jekyll

What is the best way to solve url strategy migration?

I found the best practice in common is create htaccess like so

相关标签:
8条回答
  • 2020-12-07 09:47

    redirect-from plugin

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

    It is supported by GitHub and makes it easy:

    _config.yml

    gems:
      - jekyll-redirect-from
    

    a.md

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

    as explained at: https://help.github.com/articles/redirects-on-github-pages/

    Now:

    firefox localhost:4000/a
    

    will redirect you to example.com.

    The plugin takes over whenever the redirect_to is defined by the page.

    Tested on GitHub pages v64.

    Note: this version has a serious recently fixed bug which wrongly reuses the default layout for the redirect: https://github.com/jekyll/jekyll-redirect-from/pull/106

    Manual layout method

    If you don't feel like using https://github.com/jekyll/jekyll-redirect-from it's easy to implement it yourself:

    a.md

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

    _layouts/redirect.html based on Redirect from an HTML page :

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

    Like this example, the redirect-from plugin does not generate 301s, only meta + JavaScript redirects.

    We can verify what is going on with:

    curl localhost:4000/a
    
    0 讨论(0)
  • 2020-12-07 09:47

    The best option is to avoid url changes altogether by setting the permalink format in _config.yml to match your old blog.

    Beyond that, the most complete solution is generating redirect pages, but isn't necessarily worth the effort. I ended up simply making my 404 page a bit friendlier, with javascript to guess the correct new url. It doesn't do anything for search, but actual users can get to the page they were looking for and there's no legacy stuff to support in the rest of the code.

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

    0 讨论(0)
  • 2020-12-07 09:49

    As others have mentioned, the best solution is to preserve working URLs or duplicate the pages and specify a canonical URL.

    Since github pages doesn't support true redirects, I chose to set up rerouter on Heroku to return 301 (permanent) redirects from my site's old domain to the new one. I described the details here:

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

    0 讨论(0)
  • 2020-12-07 09:50

    Have you tried the Jekyll Alias Generator plugin?

    You put the alias urls in the YAML front matter of a post:

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

    When a user visits one of the alias urls, they are redirected to the main url via a meta tag refresh:

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

    See also this blog post on the subject.

    0 讨论(0)
  • 2020-12-07 09:57

    The best solution is to use both <meta http-equiv="refresh" and <link rel="canonical" href=

    It works very well, Google Bot reindexed my entire website under new links without losing positions. Also the users are redirected to the new posts right away.

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

    Using <meta http-equiv="refresh" will redirect each visitor to the new post. As for Google Bot, it treats <link rel="canonical" href= as 301 redirect, the effect is that you get your pages reindexed and that is what you want.

    I described whole process how I moved my blog from Wordpress to Octopress here. http://konradpodgorski.com/blog/2013/10/21/how-i-migrated-my-blog-from-wordpress-to-octopress/#redirect-301-on-github-pages

    0 讨论(0)
  • 2020-12-07 10:00

    Jekyll has gone through some major updates in the past few months, so maybe this wasn't possible when this question was originally posted...

    Jekyll supports a permalink attribute in the YAML front-matter section of your blog posts. You can specify the URL that you would like your post to have and Jekyll will use that (instead of the filename) when generating your site.

    ---
    title: My special blog post
    permalink: /programovani/2010/04/git-co-to-je-a-co-s-tim
    ---
    My blog post markdown content
    
    0 讨论(0)
提交回复
热议问题