summaryrefslogtreecommitdiff
path: root/templates
diff options
context:
space:
mode:
authorDennis Fink2026-07-14 19:38:31 +0200
committerDennis Fink2026-07-14 19:38:31 +0200
commit5c65f40bbca27dfb26e75cb027f287b2aa78cd3a (patch)
treeb21a1d58ee9efde63f7a5a1f7545b2c6bd03a4ef /templates
parent206400382a5c111842fd77c8418ad94a85f2da99 (diff)
downloaddennisfink.me-5c65f40bbca27dfb26e75cb027f287b2aa78cd3a.tar.gz
dennisfink.me-5c65f40bbca27dfb26e75cb027f287b2aa78cd3a.zip
Add structured data and microformats
This adds JSON-LD for the site, author, blog, and individual blog posts, so search engines and other consumers can understand the blog structure more clearly. It also adds Microformats2 classes to blog posts and the about page, keeping machine-readable author, post, category, date, and content data attached to the visible HTML.
Diffstat (limited to '')
-rw-r--r--templates/base.html38
-rw-r--r--templates/blog-post.html53
-rw-r--r--templates/blog.html7
-rw-r--r--templates/includes/blog-json-ld.html20
-rw-r--r--templates/index.html16
-rw-r--r--templates/macros/blog.html21
6 files changed, 133 insertions, 22 deletions
diff --git a/templates/base.html b/templates/base.html
index e2c145f..024907d 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -26,6 +26,44 @@
content="Muted green Hilbert-curve logo beside the words “Still Thinking About It” on a dark blue background">
<meta name="fediverse:creator" content="@me@dennisfink.me">
{% endblock meta %}
+ {% block json_ld %}
+ <script type="application/ld+json">
+ {
+ "@context": "https://schema.org",
+ "@graph": [{
+ "@type": "Person",
+ "@id": "{{ '/about' | url(absolute=True, external=True) }}#person",
+ "name": "Dennis Fink",
+ "url": "{{ '/about' | url(absolute=True, external=True) }}",
+ "sameAs": [
+ "https://social.dennisfink.me/@me"
+ ],
+ "gender": "Male"
+ }, {
+ "@type": "WebSite",
+ "@id": "{{ '/' | url(absolute=True, external=True) }}#website",
+ "name": "{{ bag('blog.name') }}",
+ "url": "{{ '/' | url(absolute=True, external=True) }}",
+ "author": {
+ "@id": "{{ '/about' | url(absolute=True, external=True) }}#person"
+ },
+ "publisher": {
+ "@id": "{{ '/about' | url(absolute=True, external=True) }}#person"
+ },
+ "inLanguage": "en",
+ "image": {
+ "@type": "ImageObject",
+ "@id": "{{ '/' | url(absolute=True, external=True) }}#website-image",
+ "url": "{{ '/static/images/logo.png' | url(absolute=True, external=True) }}",
+ "caption": "Still Thinking About It Logo",
+ "encodingFormat": "image/png",
+ "width": "800px",
+ "height": "800px"
+ }
+ }]
+ }
+ </script>
+ {% endblock %}
{% block styles %}
<link rel="stylesheet"
type="text/css"
diff --git a/templates/blog-post.html b/templates/blog-post.html
index 0844351..f5e8bbe 100644
--- a/templates/blog-post.html
+++ b/templates/blog-post.html
@@ -22,10 +22,63 @@
<meta property="article:tag" content="{{ t }}">
{% endfor %}
{% endblock %}
+
+{% block json_ld %}
+ {{ super() }}
+ {% include "includes/blog-json-ld.html" %}
+ {% if this.publication_date %}
+ {% set post_url = this | url(absolute=True, external=True) %}
+ {% set post_id = post_url ~ '#blogposting' %}
+ {% set person_url = '/about' | url(absolute=True, external=True) %}
+ {% set person_id = person_url ~ '#person' %}
+ {% set blog_url = '/blog' | url(absolute=True, external=True) %}
+ {% set blog_id = blog_url ~ '#blog' %}
+ {% set modified_date = this.publication_date %}
+ {% if this.updated_date %}
+ {% set modified_date = this.updated_date %}
+ {% endif %}
+ {% set post_description = bag('blog.tagline') %}
+ {% if this.description %}
+ {% set post_description = this.description %}
+ {% endif %}
+ {% if this.category %}
+ {% set category = site.get("/categories/" + this.category).name %}
+ {% endif %}
+
+ <script type="application/ld+json">
+ {
+ "@context": "https://schema.org",
+ "@type": "BlogPosting",
+ "@id": "{{ post_id }}",
+ "mainEntityOfPage": "{{ post_url }}",
+ "url": "{{ post_url }}",
+ "isPartOf": {
+ "@id": "{{ blog_id }}"
+ },
+ "headline": "{{ this.title }}",
+ "name": "{{ this.title }}",
+ "description": "{{ post_description }}",
+ "datePublished": "{{ this.publication_date | dateformat('yyyy-MM-dd') }}T00:00:00Z",
+ "dateModified": "{{ modified_date | dateformat('yyyy-MM-dd') }}T00:00:00Z",
+ "inLanguage": "en",
+ "author": {
+ "@id": "{{ person_id }}"
+ },
+ "publisher": {
+ "@id": "{{ person_id }}"
+ },
+ "keywords": "{{ this.tags | join(', ') }}",
+ "articleSection": "{{ category }}"
+ }
+ </script>
+ {% endif %}
+{% endblock %}
+
{% block styles %}
{{ super() }}
<link rel="stylesheet"
type="text/css"
href="{{ '/static/css/blog.css'|asseturl }}">
{% endblock %}
+
{% block content %}{{ render_blog_post(this) }}{% endblock %}
diff --git a/templates/blog.html b/templates/blog.html
index 0ee96c7..4c011a1 100644
--- a/templates/blog.html
+++ b/templates/blog.html
@@ -6,10 +6,17 @@
{{ super() }}
<meta property="og:type" content="website">
{% endblock %}
+
+{% block json_ld %}
+ {{ super() }}
+ {% include "includes/blog-json-ld.html" %}
+{% endblock json_ld %}
+
{% block styles %}
{{ super() }}
<link rel="stylesheet"
type="text/css"
href="{{ '/static/css/blog.css'|asseturl }}">
{% endblock %}
+
{% block content %}{{ render_blog_index(this.pagination) }}{% endblock %}
diff --git a/templates/includes/blog-json-ld.html b/templates/includes/blog-json-ld.html
new file mode 100644
index 0000000..63d3c66
--- /dev/null
+++ b/templates/includes/blog-json-ld.html
@@ -0,0 +1,20 @@
+<script type="application/ld+json">
+ {
+ "@context": "https://schema.org",
+ "@type": "Blog",
+ "@id": "{{ '/blog' | url(absolute=True, external=True) }}#blog",
+ "name": "{{ bag('blog.name') }}",
+ "description": "{{ bag('blog.tagline') }}",
+ "url": "{{ '/blog' | url(absolute=True, external=True) }}",
+ "inLanguage": "en",
+ "isPartOf": {
+ "@id": "{{ '/' | url(absolute=True, external=True) }}#website"
+ },
+ "author": {
+ "@id": "{{ '/about' | url(absolute=True, external=True) }}#person"
+ },
+ "publisher": {
+ "@id": "{{ '/about' | url(absolute=True, external=True) }}#person"
+ }
+ }
+</script>
diff --git a/templates/index.html b/templates/index.html
index 0ee96c7..396114f 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,15 +1 @@
-{% extends "base.html" %}
-
-{% from "macros/blog.html" import render_blog_index %}
-
-{% block meta %}
- {{ super() }}
- <meta property="og:type" content="website">
-{% endblock %}
-{% block styles %}
- {{ super() }}
- <link rel="stylesheet"
- type="text/css"
- href="{{ '/static/css/blog.css'|asseturl }}">
-{% endblock %}
-{% block content %}{{ render_blog_index(this.pagination) }}{% endblock %}
+{% include "blog.html" %}
diff --git a/templates/macros/blog.html b/templates/macros/blog.html
index b4caafe..904e59e 100644
--- a/templates/macros/blog.html
+++ b/templates/macros/blog.html
@@ -19,11 +19,11 @@
{% endmacro %}
{% macro render_blog_post(post, show_toc=True) %}
- <article>
+ <article class="h-entry">
<header>
<div>
<h2>
- <a href="{{ post|url }}">{{ post.title }}</a>
+ <a href="{{ post|url }}" class="u-url p-name">{{ post.title }}</a>
</h2>
<dl>
{% if post.publication_date %}
@@ -31,7 +31,8 @@
<dt>Posted:</dt>
<dd>
<a href="{{ ('/blog@index-pages/year/{}'.format(post.publication_date.year) ) | url }}">
- <time datetime="{{ post.publication_date | dateformat('yyyy-MM-dd') }}">{{ post.publication_date | dateformat("d MMMM yyyy") }}</time>
+ <time datetime="{{ post.publication_date | dateformat('yyyy-MM-dd') }}"
+ class="dt-published">{{ post.publication_date | dateformat("d MMMM yyyy") }}</time>
</a>
</dd>
</div>
@@ -47,7 +48,8 @@
<div>
<dt>Last updated:</dt>
<dd>
- <time datetime="{{ post.updated_date | dateformat('yyyy-MM-dd') }}">{{ post.updated_date | dateformat("d MMMM yyyy") }}</time>
+ <time datetime="{{ post.updated_date | dateformat('yyyy-MM-dd') }}"
+ class="dt-updated">{{ post.updated_date | dateformat("d MMMM yyyy") }}</time>
</dd>
</div>
{% endif %}
@@ -56,10 +58,13 @@
<dt>Category:</dt>
<dd>
{% set category = site.get('/categories/'+post.category) %}
- <a href="{{ category|url }}">{{ category.name }}</a>
+ <a href="{{ category|url }}" class="p-category">{{ category.name }}</a>
</dd>
</div>
{% endif %}
+ <a rel="author"
+ class="p-author h-card display-none"
+ href="{{ '/about' | url(absolute=True) }}">Dennis Fink</a>
</dl>
</div>
{% if show_toc and post.render_toc %}
@@ -67,7 +72,7 @@
{{ render_toc(toc) }}
{% endif %}
</header>
- {{ post.body }}
+ <div class="e-content">{{ post.body }}</div>
{% if post.tags %}
<footer>
<p>Tagged with</p>
@@ -75,7 +80,9 @@
{% for tag in post.tags %}
<li>
{% set tag_slug = tag|trim|lower|replace(" ", "-") %}
- <a href="{{ ('/blog/tag/' ~ tag_slug ~ '/')|url }}" rel="tag">{{ tag }}</a>
+ <a href="{{ ('/blog/tag/' ~ tag_slug ~ '/')|url }}"
+ rel="tag"
+ class="p-category">{{ tag }}</a>
{%- if not loop.last -%}, {%- else -%}.{%- endif -%}
</li>
{% endfor %}