40 lines
1.5 KiB
JavaScript
40 lines
1.5 KiB
JavaScript
import { seoPlugin } from '@payloadcms/plugin-seo';
|
|
/**
|
|
* Escape hatch from automatic title composition: whatever is typed here becomes
|
|
* the entire title — no site name, no separator. Useful on a home page, where
|
|
* composing would produce "Intecion Software | Intecion Software".
|
|
*/ const titleOverrideField = {
|
|
name: 'titleOverride',
|
|
type: 'text',
|
|
admin: {
|
|
description: 'Use this exact text as the browser-tab title — no site name, no separator. Leave empty to compose the title automatically.'
|
|
},
|
|
localized: true
|
|
};
|
|
/**
|
|
* Configures @payloadcms/plugin-seo from IPAL's SeoOption.
|
|
*
|
|
* Adds the `meta` field group (title, description, image) to the client's
|
|
* chosen collections. tabbedUI is intentionally NOT used — it merges tabs by
|
|
* inspecting the first field, which breaks when other plugins/fields (roles,
|
|
* slug) already sit in the collection, leaving an empty SEO tab. Instead the
|
|
* SEO UI fields are injected into a controlled tab by injectSeoTabs.
|
|
*/ export function buildSeoPlugin({ seo, uploadsCollection = 'media' }) {
|
|
return seoPlugin({
|
|
collections: seo.collections,
|
|
fields: ({ defaultFields })=>[
|
|
...defaultFields,
|
|
titleOverrideField,
|
|
...seo.fields ?? []
|
|
],
|
|
uploadsCollection,
|
|
...seo.generateTitle && {
|
|
generateTitle: seo.generateTitle
|
|
},
|
|
...seo.generateDescription && {
|
|
generateDescription: seo.generateDescription
|
|
}
|
|
});
|
|
}
|
|
|
|
//# sourceMappingURL=seoPluginConfig.js.map
|