Skip to content

Commit

Permalink
feat(blog): Add frontMatter.title_meta to override title for SEO (#…
Browse files Browse the repository at this point in the history
…10586)

Co-authored-by: sebastien <[email protected]>
  • Loading branch information
ilg-ul and slorber authored Oct 31, 2024
1 parent 5c1ce01 commit 5cf2c39
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,21 @@ describe('validateBlogPostFrontMatter title', () => {
{title: ''},
{title: 'title'},
],
invalidFrontMatters: [
[{title: null}, 'must be a string'],
[{title: false}, 'must be a string'],
],
});
});

describe('validateBlogPostFrontMatter title_meta', () => {
testField({
prefix: 'title_meta',
validFrontMatters: [{title: ''}, {title_meta: 'title'}],
invalidFrontMatters: [
[{title_meta: null}, 'must be a string'],
[{title_meta: false}, 'must be a string'],
],
});
});

Expand Down
1 change: 1 addition & 0 deletions packages/docusaurus-plugin-content-blog/src/frontMatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ const FrontMatterAuthorErrorMessage =
const BlogFrontMatterSchema = Joi.object<BlogPostFrontMatter>({
id: Joi.string(),
title: Joi.string().allow(''),
title_meta: Joi.string(),
description: Joi.string().allow(''),
tags: FrontMatterTagsSchema,
date: Joi.date().raw(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,11 @@ declare module '@docusaurus/plugin-content-blog' {
* @see {@link BlogPostMetadata.title}
*/
title?: string;
/**
* Will be used for SEO page metadata and override BlogPostMetadata.title.
* @see {@link BlogPostMetadata.title_meta}
*/
title_meta?: string;
/**
* Will override the default excerpt.
* @see {@link BlogPostMetadata.description}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export default function BlogPostPageMetadata(): JSX.Element {
const image = assets.image ?? frontMatter.image;
return (
<PageMetadata
title={title}
title={frontMatter.title_meta ?? title}
description={description}
keywords={keywords}
image={image}>
Expand Down
1 change: 1 addition & 0 deletions website/docs/api/plugins/plugin-content-docs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ Accepted fields:
| --- | --- | --- | --- |
| `id` | `string` | file path (including folders, without the extension) | A unique document ID. |
| `title` | `string` | Markdown title or `id` | The text title of your document. Used for the page metadata and as a fallback value in multiple places (sidebar, next/previous buttons...). Automatically added at the top of your doc if it does not contain any Markdown title. |
| `title_meta` | `string` | `frontMatter.title` | The SEO metadata title of your document used in `<head>` for `<title>` and `og:title`. Permits to override `frontMatter.title` when the displayed title and SEO title should be different. |
| `pagination_label` | `string` | `sidebar_label` or `title` | The text used in the document next/previous buttons for this document. |
| `sidebar_label` | `string` | `title` | The text shown in the document sidebar for this document. |
| `sidebar_position` | `number` | Default ordering | Controls the position of a doc inside the generated sidebar slice when using `autogenerated` sidebar items. See also [Autogenerated sidebar metadata](/docs/sidebar/autogenerated#autogenerated-sidebar-metadata). |
Expand Down

0 comments on commit 5cf2c39

Please sign in to comment.