From 3cb99124ded186a517c4d659b2abfd8a57c84209 Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Thu, 6 Jan 2022 18:31:01 +0800 Subject: [PATCH] feat(content-docs): allow SEO metadata for category index pages (#6239) --- .../src/categoryGeneratedIndex.ts | 2 ++ .../src/plugin-content-docs.d.ts | 2 ++ .../docusaurus-plugin-content-docs/src/routes.ts | 15 +++++++++++++-- .../src/sidebars/types.ts | 4 ++++ .../src/sidebars/validation.ts | 2 ++ .../docusaurus-plugin-content-docs/src/types.ts | 2 ++ .../theme/DocCategoryGeneratedIndexPage/index.tsx | 4 ++++ website/sidebars.js | 2 ++ 8 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts index af5b1631c1..ac2cb55e1e 100644 --- a/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts +++ b/packages/docusaurus-plugin-content-docs/src/categoryGeneratedIndex.ts @@ -28,6 +28,8 @@ function getCategoryGeneratedIndexMetadata({ return { title: category.link.title ?? category.label, description: category.link.description, + image: category.link.image, + keywords: category.link.keywords, slug: category.link.slug, permalink: category.link.permalink, sidebar: sidebarName, diff --git a/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts b/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts index 14c761846e..9c4a20fc3f 100644 --- a/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts +++ b/packages/docusaurus-plugin-content-docs/src/plugin-content-docs.d.ts @@ -42,6 +42,8 @@ declare module '@docusaurus/plugin-content-docs' { export type PropCategoryGeneratedIndex = { title: string; description?: string; + image?: string; + keywords?: string | readonly string[]; slug: string; permalink: string; navigation: PropNavigation; diff --git a/packages/docusaurus-plugin-content-docs/src/routes.ts b/packages/docusaurus-plugin-content-docs/src/routes.ts index 91c1881a8a..1ca1b7b089 100644 --- a/packages/docusaurus-plugin-content-docs/src/routes.ts +++ b/packages/docusaurus-plugin-content-docs/src/routes.ts @@ -30,8 +30,17 @@ export async function createCategoryGeneratedIndexRoutes({ async function createCategoryGeneratedIndexRoute( categoryGeneratedIndex: CategoryGeneratedIndexMetadata, ): Promise { - const {sidebar, title, description, slug, permalink, previous, next} = - categoryGeneratedIndex; + const { + sidebar, + title, + description, + slug, + permalink, + previous, + next, + image, + keywords, + } = categoryGeneratedIndex; const propFileName = slugs.slug( `${version.versionPath}-${categoryGeneratedIndex.sidebar}-category-${categoryGeneratedIndex.title}`, @@ -42,6 +51,8 @@ export async function createCategoryGeneratedIndexRoutes({ description, slug, permalink, + image, + keywords, navigation: { previous, next, diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts index 2112acfcc0..1e96f0c7e1 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/types.ts @@ -52,6 +52,8 @@ export type SidebarItemCategoryLinkGeneratedIndexConfig = { slug?: string; title?: string; description?: string; + image?: string; + keywords?: string | readonly string[]; }; export type SidebarItemCategoryLinkGeneratedIndex = { type: 'generated-index'; @@ -59,6 +61,8 @@ export type SidebarItemCategoryLinkGeneratedIndex = { permalink: string; title?: string; description?: string; + image?: string; + keywords?: string | readonly string[]; }; export type SidebarItemCategoryLinkConfig = diff --git a/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts b/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts index 510951c7a9..192d69bb35 100644 --- a/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts +++ b/packages/docusaurus-plugin-content-docs/src/sidebars/validation.ts @@ -70,6 +70,8 @@ const sidebarItemCategoryLinkSchema = Joi.object() // permalink: Joi.string().optional(), // No, this one is not in the user config, only in the normalized version title: Joi.string().optional(), description: Joi.string().optional(), + image: Joi.string().optional(), + keywords: [Joi.string(), Joi.array().items(Joi.string())], }), }, { diff --git a/packages/docusaurus-plugin-content-docs/src/types.ts b/packages/docusaurus-plugin-content-docs/src/types.ts index eae507db4d..e34b97eb78 100644 --- a/packages/docusaurus-plugin-content-docs/src/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/types.ts @@ -174,6 +174,8 @@ export type CategoryGeneratedIndexMetadata = { sidebar: string; previous?: DocNavLink; next?: DocNavLink; + image?: string; + keywords?: string | readonly string[]; }; export type SourceToPermalink = { diff --git a/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx b/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx index 300da0d4bb..757713df0e 100644 --- a/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/DocCategoryGeneratedIndexPage/index.tsx @@ -14,6 +14,7 @@ import Seo from '@theme/Seo'; import DocVersionBanner from '@theme/DocVersionBanner'; import DocVersionBadge from '@theme/DocVersionBadge'; import {MainHeading} from '@theme/Heading'; +import useBaseUrl from '@docusaurus/useBaseUrl'; import styles from './styles.module.css'; @@ -26,6 +27,9 @@ export default function DocCategoryGeneratedIndexPage({
diff --git a/website/sidebars.js b/website/sidebars.js index d5ca737e13..4d334a5321 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -33,6 +33,8 @@ const sidebars = { title: 'Docusaurus Guides', description: "Let's learn about the most important Docusaurus concepts!", + keywords: ['guides'], + image: '/img/docusaurus.png', }, items: [ 'guides/creating-pages',