2021-07-25 16:40:40 +03:00
|
|
|
|
---
|
|
|
|
|
template: overrides/main.html
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
# Setting up social cards
|
|
|
|
|
|
|
|
|
|
Social cards, also known as social previews, are images that are displayed when
|
|
|
|
|
a link to your project documentation is shared on social media. Material for
|
2022-09-11 20:25:40 +03:00
|
|
|
|
MkDocs can generate beautiful social cards automatically, using the [colors],
|
|
|
|
|
[fonts] and [logo][^1] defined in `mkdocs.yml`,
|
2021-10-21 00:02:55 +03:00
|
|
|
|
e.g.:
|
|
|
|
|
|
|
|
|
|
<figure markdown>
|
|
|
|
|
|
|
|
|
|
[![Social cards preview]][Social cards preview]
|
|
|
|
|
|
|
|
|
|
<figcaption markdown>
|
|
|
|
|
|
|
|
|
|
The social preview image for the page on [setting up site analytics].
|
|
|
|
|
[Twitter's Card validator] shows how it will look when shared.
|
|
|
|
|
|
|
|
|
|
</figcaption>
|
|
|
|
|
</figure>
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
|
|
|
|
[^1]:
|
|
|
|
|
Both types of logos, images (`theme.logo`) and icons (`theme.icon.logo`)
|
|
|
|
|
are supported. While an image logo is used as-is, icons are filled with the
|
|
|
|
|
color used in the header (white or black), which depends on the primary
|
|
|
|
|
color.
|
|
|
|
|
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[colors]: changing-the-colors.md#primary-color
|
|
|
|
|
[fonts]: changing-the-fonts.md#regular-font
|
2021-10-10 20:22:13 +03:00
|
|
|
|
[logo]: changing-the-logo-and-icons.md#logo
|
2021-10-21 00:02:55 +03:00
|
|
|
|
[Social cards preview]: ../assets/screenshots/social-cards.png
|
|
|
|
|
[setting up site analytics]: setting-up-site-analytics.md
|
|
|
|
|
[Twitter's Card validator]: https://cards-dev.twitter.com/validator
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
|
|
|
|
## Configuration
|
|
|
|
|
|
2022-02-27 15:19:44 +03:00
|
|
|
|
### Built-in social plugin
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2022-05-05 14:33:14 +03:00
|
|
|
|
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
|
2021-10-10 20:22:13 +03:00
|
|
|
|
[:octicons-tag-24: insiders-2.12.0][Insiders] ·
|
2021-10-03 21:28:52 +03:00
|
|
|
|
:octicons-cpu-24: Plugin ·
|
2021-10-10 20:22:13 +03:00
|
|
|
|
:octicons-beaker-24: Experimental
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2021-10-21 00:02:55 +03:00
|
|
|
|
First, ensure you've installed all [dependencies] and have a valid [`site_url`]
|
|
|
|
|
[site_url], as social preview images must be referenced via absolute URLs.
|
|
|
|
|
Then, add the following lines to `mkdocs.yml`:
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
|
|
|
|
``` yaml
|
|
|
|
|
plugins:
|
|
|
|
|
- social
|
|
|
|
|
```
|
|
|
|
|
|
2022-04-02 16:31:38 +03:00
|
|
|
|
> If you need to be able to build your documentation with and without
|
|
|
|
|
> [Insiders], please refer to the [built-in plugins] section to learn how
|
|
|
|
|
> shared configurations help to achieve this.
|
|
|
|
|
|
2021-10-21 00:02:55 +03:00
|
|
|
|
The following configuration options are available:
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[`cards`](#+social.cards){ #+social.cards }
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2021-12-05 14:39:54 +03:00
|
|
|
|
: :octicons-milestone-24: Default: `true` – This option specifies whether
|
2021-10-21 00:02:55 +03:00
|
|
|
|
to generate social card images. If you want to switch the plugin off, e.g.
|
|
|
|
|
for local builds, you can use an [environment variable]:
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2021-10-21 00:02:55 +03:00
|
|
|
|
``` yaml
|
|
|
|
|
plugins:
|
|
|
|
|
- social:
|
2022-02-20 21:49:23 +03:00
|
|
|
|
cards: !ENV [CARDS, false]
|
2021-10-21 00:02:55 +03:00
|
|
|
|
```
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[`cards_color`](#+social.cards_color){ #+social.cards_color }
|
2021-08-07 14:12:05 +03:00
|
|
|
|
|
2021-10-11 14:38:03 +03:00
|
|
|
|
: [:octicons-tag-24: insiders-2.13.0][Insiders] · :octicons-milestone-24:
|
2021-12-05 14:39:54 +03:00
|
|
|
|
Default: [`theme.palette.primary`][palette.primary] – This option specifies
|
|
|
|
|
the colors for the background `fill` and foreground `text` when generating
|
|
|
|
|
the social card:
|
2021-08-07 14:12:05 +03:00
|
|
|
|
|
|
|
|
|
``` yaml
|
|
|
|
|
plugins:
|
|
|
|
|
- social:
|
|
|
|
|
cards_color:
|
2021-12-11 16:30:07 +03:00
|
|
|
|
fill: "#0FF1CE" # (1)!
|
2021-08-07 14:12:05 +03:00
|
|
|
|
text: "#FFFFFF"
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-10 20:22:13 +03:00
|
|
|
|
1. Colors can either be defined as HEX colors, or as [CSS color keywords].
|
|
|
|
|
Note that HEX colors must be enclosed in quotes.
|
2021-08-07 14:12:05 +03:00
|
|
|
|
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[`cards_font`](#+social.cards_font){ #+social.cards_font }
|
2021-12-05 14:39:54 +03:00
|
|
|
|
|
|
|
|
|
: [:octicons-tag-24: insiders-4.3.0][Insiders] · :octicons-milestone-24:
|
|
|
|
|
Default: [`theme.font.text`][font.text] – This option specifies which font
|
|
|
|
|
to use for rendering the social card, which can be any font hosted on
|
|
|
|
|
[Google Fonts]:
|
|
|
|
|
|
|
|
|
|
``` yaml
|
|
|
|
|
plugins:
|
|
|
|
|
- social:
|
|
|
|
|
cards_font: Roboto
|
|
|
|
|
```
|
|
|
|
|
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[`cards_dir`](#+social.cards_dir){ #+social.cards_dir }
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
|
|
|
|
: :octicons-milestone-24: Default: `assets/images/social` – This option
|
2021-10-10 20:22:13 +03:00
|
|
|
|
specifies where the generated social card images will be written to. It's
|
|
|
|
|
normally not necessary to change this option:
|
2021-07-25 16:40:40 +03:00
|
|
|
|
|
|
|
|
|
``` yaml
|
|
|
|
|
plugins:
|
|
|
|
|
- social:
|
2022-09-11 20:25:40 +03:00
|
|
|
|
cards_dir: path/to/folder
|
2021-07-25 16:40:40 +03:00
|
|
|
|
```
|
|
|
|
|
|
2021-10-03 21:28:52 +03:00
|
|
|
|
[Insiders]: ../insiders/index.md
|
2021-10-21 00:02:55 +03:00
|
|
|
|
[dependencies]: #dependencies
|
2021-10-10 22:04:22 +03:00
|
|
|
|
[site_url]: https://www.mkdocs.org/user-guide/configuration/#site_url
|
2022-04-02 16:31:38 +03:00
|
|
|
|
[built-in plugins]: ../insiders/getting-started.md#built-in-plugins
|
2022-09-11 20:25:40 +03:00
|
|
|
|
[palette.primary]: changing-the-colors.md#primary-color
|
|
|
|
|
[font.text]: changing-the-fonts.md#regular-font
|
2021-10-21 00:02:55 +03:00
|
|
|
|
[environment variable]: https://www.mkdocs.org/user-guide/configuration/#environment-variables
|
2021-10-10 20:22:13 +03:00
|
|
|
|
[CSS color keywords]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#color_keywords
|
2021-12-05 14:39:54 +03:00
|
|
|
|
[Google Fonts]: https://fonts.google.com
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
2021-10-21 00:02:55 +03:00
|
|
|
|
#### Dependencies
|
|
|
|
|
|
2021-10-28 00:26:07 +03:00
|
|
|
|
Two Python packages are installed alongside Material for MkDocs to generate the
|
|
|
|
|
social preview images, both of which are based on the [Cairo Graphics] library:
|
2021-10-21 00:02:55 +03:00
|
|
|
|
|
|
|
|
|
- [Pillow] – Python imaging library
|
|
|
|
|
- [CairoSVG] – Converter for `*.svg` files
|
|
|
|
|
|
2021-10-28 00:26:07 +03:00
|
|
|
|
The [Docker image] for Insiders comes with all dependencies pre-installed. If
|
|
|
|
|
you don't want to use Docker, see the following section which explains how to
|
|
|
|
|
install all dependencies on your system:
|
2021-10-21 00:02:55 +03:00
|
|
|
|
|
2021-10-28 00:26:07 +03:00
|
|
|
|
=== ":material-apple: macOS"
|
|
|
|
|
|
|
|
|
|
Make sure [Homebrew] is installed, which is a modern package manager for
|
|
|
|
|
macOS. Next, use the following command to install all necessary
|
|
|
|
|
dependencies:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
brew install cairo freetype libffi libjpeg libpng zlib
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
=== ":fontawesome-brands-windows: Windows"
|
|
|
|
|
|
|
|
|
|
As stated in the [installation guide], the easiest way to get up and running
|
|
|
|
|
with the [Cairo Graphics] library on Windows is by installing [GTK+], since
|
|
|
|
|
it has Cairo as a dependency.
|
|
|
|
|
|
|
|
|
|
=== ":material-linux: Linux"
|
2021-10-21 00:02:55 +03:00
|
|
|
|
|
2021-10-28 00:26:07 +03:00
|
|
|
|
There are several package managers for Linux with varying availability per
|
|
|
|
|
distribution. The [installation guide] explains how to install the [Cairo
|
|
|
|
|
Graphics] library for your distribution:
|
|
|
|
|
|
|
|
|
|
=== ":material-ubuntu: Ubuntu"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
apt-get install libcairo2-dev libfreetype6-dev libffi-dev libjpeg-dev libpng-dev libz-dev
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
=== ":material-fedora: Fedora"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
yum install cairo-devel freetype-devel libffi-devel libjpeg-devel libpng-devel zlib-devel
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
=== ":fontawesome-brands-suse: openSUSE"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
zypper install cairo-devel freetype-devel libffi-devel libjpeg-devel libpng-devel zlib-devel
|
|
|
|
|
```
|
2021-10-21 00:02:55 +03:00
|
|
|
|
|
|
|
|
|
[Cairo Graphics]: https://www.cairographics.org/
|
|
|
|
|
[Pillow]: https://pillow.readthedocs.io/
|
|
|
|
|
[CairoSVG]: https://cairosvg.org/
|
|
|
|
|
[Docker image]: ../insiders/getting-started.md#with-docker
|
2021-10-28 00:26:07 +03:00
|
|
|
|
[Homebrew]: https://brew.sh/
|
|
|
|
|
[installation guide]: https://www.cairographics.org/download/
|
|
|
|
|
[GTK+]: https://www.gtk.org/docs/installations/windows/
|
2021-10-21 00:02:55 +03:00
|
|
|
|
|
2021-10-10 22:04:22 +03:00
|
|
|
|
#### Caching <small>recommended</small> { #caching data-toc-label="Caching" }
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
2022-02-27 15:19:44 +03:00
|
|
|
|
The [built-in social plugin] automatically fetches the fonts you define in
|
|
|
|
|
`mkdocs.yml` from Google Fonts, and uses them to render the text that is
|
2021-10-10 20:22:13 +03:00
|
|
|
|
displayed on the social card. The font files and generated cards are both
|
2021-07-25 21:36:30 +03:00
|
|
|
|
written to the `.cache` directory, which is used in subsequent builds to detect
|
|
|
|
|
whether the social cards need to be regenerated. You might want to:
|
|
|
|
|
|
2021-10-10 13:19:14 +03:00
|
|
|
|
1. Ignore the `.cache` directory in your project, by adding it to `.gitignore`.
|
|
|
|
|
2. When building your site for publishing, use a build cache to save the
|
|
|
|
|
`.cache` directory in between builds. Taking the example from the
|
2021-10-10 20:22:13 +03:00
|
|
|
|
[publishing guide], add the following lines:
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
|
|
|
|
``` yaml hl_lines="15-18"
|
|
|
|
|
name: ci
|
|
|
|
|
on:
|
|
|
|
|
push:
|
|
|
|
|
branches:
|
|
|
|
|
- master
|
|
|
|
|
- main
|
|
|
|
|
jobs:
|
|
|
|
|
deploy:
|
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
|
steps:
|
|
|
|
|
- uses: actions/checkout@v2
|
|
|
|
|
- uses: actions/setup-python@v2
|
|
|
|
|
with:
|
|
|
|
|
python-version: 3.x
|
|
|
|
|
- uses: actions/cache@v2
|
|
|
|
|
with:
|
|
|
|
|
key: ${{ github.ref }}
|
|
|
|
|
path: .cache
|
|
|
|
|
- run: pip install mkdocs-material
|
|
|
|
|
- run: mkdocs gh-deploy --force
|
|
|
|
|
```
|
|
|
|
|
|
2022-02-27 15:19:44 +03:00
|
|
|
|
[built-in social plugin]: #built-in-social-plugin
|
2021-10-10 20:22:13 +03:00
|
|
|
|
[publishing guide]: ../publishing-your-site.md#with-github-actions
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
2021-10-10 20:22:13 +03:00
|
|
|
|
#### Meta tags
|
2021-07-25 21:36:30 +03:00
|
|
|
|
|
2022-02-27 15:19:44 +03:00
|
|
|
|
The [built-in social plugin] automatically sets all necessary `meta` tags,
|
2021-10-10 20:22:13 +03:00
|
|
|
|
equivalent to the following two customizations, which you can set manually when
|
|
|
|
|
you don't want to use it:
|
2021-10-10 14:17:39 +03:00
|
|
|
|
|
|
|
|
|
=== ":material-graph: Open Graph"
|
|
|
|
|
|
|
|
|
|
``` html
|
2022-01-16 15:44:31 +03:00
|
|
|
|
{% extends "base.html" %}
|
|
|
|
|
|
2021-10-10 14:17:39 +03:00
|
|
|
|
{% block extrahead %}
|
|
|
|
|
{% set title = config.site_name %}
|
|
|
|
|
{% if page and page.meta and page.meta.title %}
|
|
|
|
|
{% set title = title ~ " - " ~ page.meta.title %}
|
|
|
|
|
{% elif page and page.title and not page.is_homepage %}
|
2021-10-10 20:22:13 +03:00
|
|
|
|
{% set title = title ~ " - " ~ page.title %}
|
2021-10-10 14:17:39 +03:00
|
|
|
|
{% endif %}
|
|
|
|
|
<meta property="og:type" content="website" />
|
|
|
|
|
<meta property="og:title" content="{{ title }}" />
|
|
|
|
|
<meta property="og:description" content="{{ config.site_description }}" />
|
|
|
|
|
<meta property="og:url" content="{{ page.canonical_url }}" />
|
|
|
|
|
<meta property="og:image" content="<url>" />
|
|
|
|
|
<meta property="og:image:type" content="image/png" />
|
|
|
|
|
<meta property="og:image:width" content="1200" />
|
|
|
|
|
<meta property="og:image:height" content="630" />
|
|
|
|
|
{% endblock %}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
=== ":fontawesome-brands-twitter: Twitter Cards"
|
|
|
|
|
|
|
|
|
|
``` html
|
2022-01-16 15:44:31 +03:00
|
|
|
|
{% extends "base.html" %}
|
|
|
|
|
|
2021-10-10 14:17:39 +03:00
|
|
|
|
{% block extrahead %}
|
|
|
|
|
{% set title = config.site_name %}
|
|
|
|
|
{% if page and page.meta and page.meta.title %}
|
|
|
|
|
{% set title = title ~ " - " ~ page.meta.title %}
|
|
|
|
|
{% elif page and page.title and not page.is_homepage %}
|
2021-10-10 20:22:13 +03:00
|
|
|
|
{% set title = title ~ " - " ~ page.title %}
|
2021-10-10 14:17:39 +03:00
|
|
|
|
{% endif %}
|
|
|
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
|
|
|
<meta name="twitter:title" content="{{ title }}" />
|
|
|
|
|
<meta name="twitter:description" content="{{ config.site_description }}" />
|
|
|
|
|
<meta name="twitter:image" content="<url>" />
|
|
|
|
|
{% endblock %}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
[Twitter Cards]: https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/abouts-cards
|
2021-10-10 20:22:13 +03:00
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
|
|
If you want to adjust the title or set a custom description for the social card,
|
2022-08-13 11:57:43 +03:00
|
|
|
|
you can set the front matter `title` and `description` properties, which take
|
|
|
|
|
precedence over the default values.
|
2021-10-10 20:22:13 +03:00
|
|
|
|
|
|
|
|
|
- [Changing the title]
|
|
|
|
|
- [Changing the description]
|
|
|
|
|
|
2021-12-16 19:08:57 +03:00
|
|
|
|
[Changing the title]: ../reference/index.md#setting-the-page-title
|
|
|
|
|
[Changing the description]: ../reference/index.md#setting-the-page-description
|