diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 05255f3f4..f218ed383 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -10,7 +10,7 @@ jobs:
     runs-on: ubuntu-latest
     env:
       BASE_URL: https://github.com/getzola/zola/releases/download
-      VERS: v0.12.2
+      VERS: v0.14.1
       ARCH: x86_64-unknown-linux-gnu
       # https://github.com/marketplace/actions/github-pages#warning-limitation
       GITHUB_PAT: ${{ secrets.GITHUB_PAT }}
diff --git a/README.md b/README.md
index cb0c14378..f44bb0a7e 100644
--- a/README.md
+++ b/README.md
@@ -8,14 +8,16 @@ To contribute to the newsletter, please see [CONTRIBUTING].
 
 ## Building from Source
 
-The site is built and deployed automatically from the repo (see .github/workflows/ci.yml).
+The site is built and deployed automatically from the repo (see
+[.github/workflows/ci.yml][ci]).
 
 To preview/experiment locally:
 
-1) [Install Zola][zola-get].
+1) [Install Zola][zola-get]. Make sure to use 0.14.1, to match [our CI config][ci]!
 2) Run `zola serve --drafts` and open the link.
 
 [zola-get]: https://getzola.org/documentation/getting-started/installation
+[ci]: https://github.com/rust-gamedev/rust-gamedev.github.io/blob/source/.github/workflows/ci.yml
 
 ## License
 
diff --git a/config.toml b/config.toml
index 82a299c13..3096bb917 100644
--- a/config.toml
+++ b/config.toml
@@ -3,10 +3,12 @@ description = "Stay up to date with the progress and recent developments in the
 base_url = "https://gamedev.rs/"
 default_language = "en"
 compile_sass = true
-highlight_code = true
 generate_feed = true
 feed_filename = "rss.xml"
 
+[markdown]
+highlight_code = true
+
 [extra]
 date_format = "%F"
 
diff --git a/content/news/006/index.md b/content/news/006/index.md
index 5fa2ce3cd..0b62ad87f 100644
--- a/content/news/006/index.md
+++ b/content/news/006/index.md
@@ -109,7 +109,7 @@ It was also the first anniversary of This Week in Veloren!
 There has been a devblog each week since the end of January last year.
 Here are some of the big changes in this release:
 
-```text
+```txt
 - Added initial region system implementation
 - Added moon and clouds
 - Added proper SFX system
diff --git a/content/news/007/index.md b/content/news/007/index.md
index fbc739553..2c4c7e8e5 100644
--- a/content/news/007/index.md
+++ b/content/news/007/index.md
@@ -196,7 +196,7 @@ is a large part of what is needed for The Content Update.
 
 Here is the February changelog:
 
-```text
+```txt
 - Fixed NPCs attacking the player forever after killing them
 - Extend run sfx to small animals to prevent sneak attacks by geese
 - Added sfx for wielding/unwielding weapons
diff --git a/content/news/008/index.md b/content/news/008/index.md
index 2faf6b728..417f9993d 100644
--- a/content/news/008/index.md
+++ b/content/news/008/index.md
@@ -348,7 +348,7 @@ Networking is also being reworked from the ground up.
 
 Here is the March changelog:
 
-```text
+```txt
 - Added sfx for wielding/unwielding weapons
 - Fixed NPCs attacking the player forever after killing them
 - Added sfx for collecting, dropping and using inventory items
diff --git a/content/news/009/index.md b/content/news/009/index.md
index 89d743187..648a2a32a 100644
--- a/content/news/009/index.md
+++ b/content/news/009/index.md
@@ -495,7 +495,7 @@ more alive.
 
 Here is the April changelog:
 
-```text
+```txt
 - Complete rewrite of the combat system into a state machine
 - Abilities like Dash and Triplestrike
 - Fireball explosions
diff --git a/content/news/010/index.md b/content/news/010/index.md
index 06cc49408..49237a5f1 100644
--- a/content/news/010/index.md
+++ b/content/news/010/index.md
@@ -737,7 +737,7 @@ Also, check out a new "Game of Life" demo [here][iced-life].
 
 ### [beehive]
 
-```text
+```txt
        yz +Y
        __
    yx /  \ xz +X
diff --git a/content/news/011/index.md b/content/news/011/index.md
index fc8f9bdab..81fb9bffb 100644
--- a/content/news/011/index.md
+++ b/content/news/011/index.md
@@ -748,7 +748,7 @@ increased incremental build time, and build artifacts size.
 nanoserde may be useful when the whole game has less than a minute
 clean build time and spending ~40s on serde is unreasonable.
 
-```text
+```txt
 > cargo tree
 nanoserde v0.1.0 (/../nanoserde)
 └── nanoserde-derive v0.1.0 (/../nanoserde/derive)
diff --git a/content/news/013/index.md b/content/news/013/index.md
index ac0615624..683a254f5 100644
--- a/content/news/013/index.md
+++ b/content/news/013/index.md
@@ -1016,7 +1016,7 @@ using `#` as a prefix.
 Here is an example of this feature is being tested in
 an experimental offline 3D renderer (not open sourced):
 
-```text
+```txt
 // Called by `set_simple(scene: _, sdf: _, id: _)`.
 dyon_fn!{fn set_simple__scene_sdf_id(
     scene: #&mut SimpleScene,
diff --git a/content/news/016/index.md b/content/news/016/index.md
index e08956aed..a9a4b1da2 100644
--- a/content/news/016/index.md
+++ b/content/news/016/index.md
@@ -531,7 +531,7 @@ It has a handful of features that make it stand out:
 Reddit user [vlmutolo] also made a [toy benchmark] comparing rkyv against serde
 and bincode and found that rkyv had promising initial numbers:
 
-```text
+```txt
 serialize (bincode):    89 ns/iter
 serialize (rkyv):       86 ns/iter
 
diff --git a/content/news/026/index.md b/content/news/026/index.md
index 200a1216d..a537b6f2f 100644
--- a/content/news/026/index.md
+++ b/content/news/026/index.md
@@ -818,7 +818,7 @@ showing step by step process of how one could build them on their own.
 
 ### [hexagonal_pathfinding_astar]
 
-```plain
+```txt
                                         _______
                                        /   E   \
                                _______/  (4,3)  \
diff --git a/templates/index.html b/templates/index.html
index 1a518dd2b..df68c7b1a 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,6 +1,6 @@
 {% import "includes/post_list.html" as macros %}
 <!DOCTYPE html>
-<html lang="{% block lang_decl %}{{ config.default_language }}{% endblock lang_decl %}">
+<html lang="{{ lang }}">
 
     <head>
         <meta charset="utf-8">
diff --git a/templates/page.html b/templates/page.html
index e47bf81f9..80320feb0 100644
--- a/templates/page.html
+++ b/templates/page.html
@@ -1,7 +1,5 @@
 {% extends "index.html" %}
 
-{% block lang_decl %}{{ lang }}{% endblock lang_decl %}
-
 {% block seo %}
     <title>{{ page.title }} | {{ config.title | default(value="Minima") }}</title>
 
diff --git a/templates/post.html b/templates/post.html
index eea16a350..55ff390ad 100644
--- a/templates/post.html
+++ b/templates/post.html
@@ -1,7 +1,5 @@
 {% extends "index.html" %}
 
-{% block lang_decl %}{{ lang }}{% endblock lang_decl %}
-
 {% block seo %}
     <title>{{ page.title }} | {{ config.title | default(value="Minima") }}</title>
 
diff --git a/templates/posts.html b/templates/posts.html
index 368ee1b94..2b30b5e7f 100644
--- a/templates/posts.html
+++ b/templates/posts.html
@@ -1,7 +1,5 @@
 {% extends "index.html" %}
 
-{% block lang_decl %}{{ lang }}{% endblock lang_decl %}
-
 {% block content %}
 <div class="posts wrapper">
     <h2 class="post-list-heading">{{ section.title | default(value="Latest News") }}</h2>