diff --git a/docs/notes/theme/guide/功能/seo.md b/docs/notes/theme/guide/功能/seo.md index abf23cd2..4e3c7ea7 100644 --- a/docs/notes/theme/guide/功能/seo.md +++ b/docs/notes/theme/guide/功能/seo.md @@ -19,6 +19,22 @@ export default defineUserConfig({ }) ``` +如需要自定义 SEO 优化,可以通过 `plugins.seo` 配置来实现。 + +```js +export default defineUserConfig({ + theme: plumeTheme({ + plugins: { + seo: { + // ... seo 配置 + } + } + }) +}) +``` + +完整配置请查看 [文档](https://ecosystem.vuejs.press/zh/plugins/seo/seo/config.html) + ::: note 示例 Fork 自 [@vuepress/plugin-seo](https://ecosystem.vuejs.press/zh/plugins/seo/seo/), 遵循 [MIT](https://github.com/vuepress/ecosystem/blob/main/LICENSE) 许可证。 diff --git a/docs/notes/theme/guide/功能/sitemap.md b/docs/notes/theme/guide/功能/sitemap.md index bc100bcb..5316d62e 100644 --- a/docs/notes/theme/guide/功能/sitemap.md +++ b/docs/notes/theme/guide/功能/sitemap.md @@ -18,3 +18,19 @@ export default defineUserConfig({ }) }) ``` + +如需要自定义 sitemap,可以通过 `plugins.sitemap` 配置来实现。 + +```js +export default defineUserConfig({ + theme: plumeTheme({ + plugins: { + sitemap: { + // ... sitemap 配置 + } + } + }) +}) +``` + +完整配置请查看 [文档](https://ecosystem.vuejs.press/zh/plugins/seo/sitemap/config.html) diff --git a/theme/src/node/plugins/getPlugins.ts b/theme/src/node/plugins/getPlugins.ts index 60acd0c9..ec15a536 100644 --- a/theme/src/node/plugins/getPlugins.ts +++ b/theme/src/node/plugins/getPlugins.ts @@ -11,8 +11,8 @@ import { markdownMathPlugin } from '@vuepress/plugin-markdown-math' import { nprogressPlugin } from '@vuepress/plugin-nprogress' import { photoSwipePlugin } from '@vuepress/plugin-photo-swipe' import { readingTimePlugin } from '@vuepress/plugin-reading-time' -import { seoPlugin } from '@vuepress/plugin-seo' -import { sitemapPlugin } from '@vuepress/plugin-sitemap' +import { seoPlugin, type SeoPluginOptions } from '@vuepress/plugin-seo' +import { sitemapPlugin, type SitemapPluginOptions } from '@vuepress/plugin-sitemap' import { watermarkPlugin } from '@vuepress/plugin-watermark' import { contentUpdatePlugin } from '@vuepress-plume/plugin-content-update' import { fontsPlugin } from '@vuepress-plume/plugin-fonts' @@ -154,12 +154,19 @@ export function getPlugins( plugins.push(commentPlugin(pluginOptions.comment)) } - if (pluginOptions.sitemap !== false && hostname && isProd) { - plugins.push(sitemapPlugin({ hostname })) + if (pluginOptions.sitemap !== false && isProd) { + const sitemapOptions = isPlainObject(pluginOptions.sitemap) ? pluginOptions.sitemap : {} + sitemapOptions.hostname ||= hostname + + if (sitemapOptions.hostname) + plugins.push(sitemapPlugin(sitemapOptions as SitemapPluginOptions)) } if (pluginOptions.seo !== false && hostname && isProd) { - plugins.push(seoPlugin({ hostname })) + const seoOptions = isPlainObject(pluginOptions.seo) ? pluginOptions.seo : {} + seoOptions.hostname ||= hostname + if (seoOptions.hostname) + plugins.push(seoPlugin(seoOptions as SeoPluginOptions)) } if (cache !== false) { diff --git a/theme/src/shared/options/plugins.ts b/theme/src/shared/options/plugins.ts index d8a9a8c7..2d149955 100644 --- a/theme/src/shared/options/plugins.ts +++ b/theme/src/shared/options/plugins.ts @@ -3,6 +3,8 @@ import type { DocSearchOptions } from '@vuepress/plugin-docsearch' import type { MarkdownImagePluginOptions } from '@vuepress/plugin-markdown-image' import type { MarkdownMathPluginOptions } from '@vuepress/plugin-markdown-math' import type { ReadingTimePluginOptions } from '@vuepress/plugin-reading-time' +import type { SeoPluginOptions } from '@vuepress/plugin-seo' +import type { SitemapPluginOptions } from '@vuepress/plugin-sitemap' import type { WatermarkPluginOptions } from '@vuepress/plugin-watermark' import type { SearchPluginOptions } from '@vuepress-plume/plugin-search' import type { ShikiPluginOptions } from '@vuepress-plume/plugin-shikiji' @@ -69,9 +71,9 @@ export interface PlumeThemePluginOptions { comment?: false | CommentPluginOptions - sitemap?: false + sitemap?: false | Omit & { hostname?: string } - seo?: false + seo?: false | Omit & { hostname?: string } /** * 阅读时间、字数统计