跳转至

MkDocs 更改网页标题为 Markdown 文档的第一个一级标题

约 120 个字 23 行代码 1 张图片 预计阅读时间 1 分钟

情境

使用 MkDocs 构建网站,使用主题为 Material。

网页标题、nav 里面的标题与 Markdown 文件的标题
网页标题、nav 里面的标题与 Markdown 文件的标题

网页标题根据 MkDocs 的规则,优先选择 nav 里面定的标题(见图中标记 1):

mkdocs.yml
1
2
3
4
5
nav:
  - Python:
    - Flask:
      - 入门:
        - 路由管理: python/flask/func/blueprint.md

但是 nav 里面定义的标题会有简略,为了 SEO,我希望能够取 Markdown 文档的第一个一级标题(见图中标记 2):

python/flask/func/blueprint.md
# Flask 使用 Blueprint 整合路由

解决方法

mkdocs.yml
1
2
3
theme:
  name: material
  custom_dir: overrides

创建 overrides/main.html

overrides/main.html
{% extends "base.html" %}

{% block htmltitle %}

    {% if page._title_from_render %}
    <title>{{ page._title_from_render }} - {{ config.site_name }}</title>
    {% elif page.meta and page.meta.title %}
    <title>{{ page.meta.title }} - {{ config.site_name }}</title>
    {% elif page.title and not page.is_homepage %}
    <title>{{ page.title | striptags }} - {{ config.site_name }}</title>
    {% else %}
    <title>{{ config.site_name }}</title>
    {% endif %}
{% endblock %}

参考