GitHub, GitLab, Bitbucket and similar services allow free, fast static websites. Some example usage limits:
- GitHub Pages: up to 100 GB/month and 1 GB storage. A streamlined GitHub Pages site (minimal images) can serve well over 100,000 monthly hits, and with a CDN such as CloudFlare can serve on the order of 1,000,000 monthly hits.
- GitLab Pages: up to 1 GB storage, using any static site generator
- Bitbucket Pages: up to 1 GB storage. Must build site on your own laptop or via cloud deployment.
GitHub Pages is noticeably easier to use than GitLab or Bitbucket Pages. GitLab runners are slow and you can run out of build quota early in the month if you update often. Most should start with GitHub Pages for websites of any size.
Create Jekyll website
The “Minimal Mistakes” Jekyll template is one of numerous quick-loading Jekyll templates. Forget about AMP, get lightning-fast mobile browsing Google PageSpeed scores with Jekyll and Minimal Mistakes. This procedure is based on Linux (including Windows Subsystem for Linux).
apt install ruby-dev libssl-dev gem update --system
be sure Gems are installed to home directory, NOT system (no sudo) by adding to
# Install Ruby Gems to ~/gems export GEM_HOME=$HOME/gems export PATH=$HOME/gems/bin:$PATH
install Gem bundler (without sudo):
gem install jekyll bundler
Download and extract latest Minimal Mistakes release. Install needed Gems:
mv minimal-mistakes username.github.io cd username.github.io bundle install
- your GitLab or GitHub username
On GitHub/GitLab, create a new blank repository
username.github.io (for GitLab,
_config.yml, change the following lines to fit your needs: title, name, description, url, repository
Connect your new website to GitLab/GitHub (swapping
github as appropriate)
git init git add . git commit -am init git remote add origin https://github.com/username/username.github.io git push -u origin master
Future edits will follow the usual
git commit -am foo git push
Now your page should be live at
See Github Pages
for custom domains and advanced configs.
Writing blog posts
_posts with filenames starting with date appear on the site.
Subfolders under _posts are transparently processed.
This is useful to organize posts by year for example, without affecting URL formatting.
appears to the public with URL:
Jekyll Format tip
These tips are based on the Minimal Mistakes Jekyll theme
Enable search icon
This enables site-wide Lunr instant search as the user types. The search icon is at the upper right corner of the toolbar on top of every page/post. It’s much better/faster than Google-based search of your site! This instant as-you-type search scales well for sites with thousands of pages.
remove default “layout: post” from migrated posts
This is useful for the default
layout: single in
sed -i '/layout: post/d' *.html
static nav buttons
_config.yml these lines (anywhere in file):
defaults: - scope: path: "" values: layout: "single" toc: true author_profile: false read_time: false comments: true share: true related: true include: ["_pages"]
index.html header (between three dashes) the lines:
header: overlay_color: "#000" overlay_filter: "0.5" overlay_image: /images/header.jpg excerpt: "text overlaid on banner image"
Remote author image
Remove category from permalinks
It’s smart to do this in case you later decide a page category should change, without screwing up your search engine results.
number of posts per archive page
paginate: 10 # amount of posts to show
Jekyll install reference