Free tool

Free GitHub Pages Custom Domain Check

Moved a GitHub Pages blog to your own domain? Enter the domain, the old github.io address and one post path, and copy six curl commands that show what a crawler sees: HTTPS, the www or apex redirect, the 301 from github.io keeping the path, the canonical tag and the sitemap. It runs in your browser: nothing is uploaded.

www or apex; the other one is checked as the redirect.

username.github.io for a user site, username.github.io/repo for a project site.

Use a real post, so the redirect is checked keeping the path.

What good looks like

  • Check 1: HTTP/2 200.
  • Checks 2 to 4: a 301 with a location on https://<your domain> at the same path.
  • Check 5: a canonical tag on your domain, not github.io.
  • Check 6: 0 (no github.io URLs left in the sitemap).

Paste into a terminal (bash or zsh)

DOMAIN="www.example.com"
OLD="https://username.github.io/repo"
POST="/blog/my-post/"

# 1. The real URL answers 200 over HTTPS
curl -sI "https://$DOMAIN$POST" | head -1

# 2. http redirects to https (needs Enforce HTTPS)
curl -sI "http://$DOMAIN$POST" | grep -iE '^(HTTP|location)'

# 3. The other hostname redirects to the chosen one
curl -sI "https://example.com$POST" | grep -iE '^(HTTP|location)'

# 4. The old github.io address redirects, keeping the path
curl -sI "$OLD$POST" | grep -iE '^(HTTP|location)'

# 5. The canonical tag uses the new host
curl -s "https://$DOMAIN$POST" | grep -o '<link rel="canonical"[^>]*>'

# 6. The sitemap lists the new host only
curl -s "https://$DOMAIN/sitemap.xml" | grep -c 'github.io'

What each check proves

Settings screens tell you what GitHub intends; these checks tell you what search engines get. Checks 2 to 4 cover the three redirects GitHub makes for you (http to https with Enforce HTTPS, apex to www or the reverse, and github.io to your domain). Checks 5 and 6 catch the most common mistake: a generator base URL still on github.io, which keeps pointing canonical tags and the sitemap at the old address. The full walkthrough, with DNS records and domain verification, is in the GitHub Pages custom domain SEO guide. For the rest of a stack's settings, see the Jekyll blog SEO checklist or the Hugo blog SEO checklist.

FAQ

Why does this give me commands instead of checking the site itself?

A web page cannot read another site's redirects or response headers: browsers follow redirects silently and hide the headers from scripts (CORS). curl shows exactly what a crawler gets, so the tool writes the commands and you run them. Nothing you type is sent anywhere.

Is it safe to paste these commands?

They only send read-only HEAD and GET requests to the addresses you entered. Every value is checked against a strict set of characters before it goes into the command, so nothing you type can run as shell code.

Check 2 shows 200 instead of 301. What is wrong?

The site still answers on plain http, which means Enforce HTTPS is off. Tick it under Settings > Pages once GitHub has issued the certificate; if the box is greyed out, remove leftover DNS records at your registrar and wait for the certificate.

Check 6 is not 0. Does that matter?

Yes. Your generator's base URL still points at github.io, so the sitemap and usually the canonical tags send search engines back to the old address. Set url/baseURL/site to the new domain and redeploy.

Put your blog on autopilot

Once the domain is right, the blog needs posts. Blogger Dog researches and writes SEO/AEO posts and commits them to your GitHub Pages repo on a schedule, then checks each one is live. Your first 3 posts are free, then plans start at $19/month.