Migrate GitHub Pages by 301 Redirects
GitHub Pages cannot perform HTTP 301 redirects as you cannot modify the server config. However, 301 redirects is really crucial for SEO. In order to keep the site ranking, you need to 301 redirects the old GitHub Pages to your new site, and manually notify Google Search Console:
Do you lose credit for links when you redirect to new URLs?
No, 301 or 302 redirects do not cause a loss in PageRank
So how to migrate GitHub Pages to a new site without losing site ranking?
Prerequisite
- A domain name
The idea is that we leverage GitHub Pages custom domain to perform 301 redirects.
Migration Steps
Assume that you want to migrate oldsite.github.io
to
newsite.vercel.app
. You have a domain name
newsite.com
.
Add a Record
Go to your domain registrar (e.g. GoDaddy) and add a record
newsite.com
-> oldsite.github.io
.
Add a custom domain in GitHub Pages (301 redirects)
Go to: GitHub Pages Repository Settings -> Pages -> Custom domain
Add your domain name (e.g. newsite.com
) to the custom
domain and press Save
.
After a while, the site refreshed:
Your site is live at https://newsite.com/
Use curl
to visit https://oldsite.github.io
and you will find that the site is 301 redirect to the custom domain
name:
$ curl -I https://oldsite.github.io
HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Content-Length: 162
Server: GitHub.com
Content-Type: text/html
permissions-policy: interest-cohort=()
Location: http://newsite.com/
...
Now your site is available at both
https://newsite.com/
and
https://oldsite.github.io
.
Update the Record
Go to your domain registrar and update the record to the final
target: newsite.com
-> newsite.vercel.app
(vercel/azure websites/self hosting).
Now your site is hosted on both https://newsite.com/
(newsite.vercel.app
) and
https://oldsite.github.io
. All traffic to the old site will
be 301 redirected to the new site.
After several days (half a year or longer), your site will be completely migrated to the new site without pagerank loss. Then you can safely deleted the old GitHub Pages.