51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import { ResolvingMetadata } from "next";
|
|
import { stripHtml } from "./common";
|
|
|
|
export function getSeoDescription(
|
|
searchDescription?: string | null,
|
|
excerpt?: string | null,
|
|
lead?: string | null
|
|
): string | undefined {
|
|
if (searchDescription && searchDescription.length) {
|
|
return searchDescription;
|
|
}
|
|
if (excerpt) {
|
|
const textOnly = stripHtml(excerpt).trim();
|
|
if (textOnly.length) {
|
|
return textOnly;
|
|
}
|
|
}
|
|
if (lead) {
|
|
const textOnly = stripHtml(lead).trim();
|
|
if (textOnly.length) {
|
|
return textOnly;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
export async function getSeoMetadata(page: any, parent: ResolvingMetadata) {
|
|
const title = page.seoTitle ?? page.title;
|
|
const description = getSeoDescription(
|
|
page?.searchDescription,
|
|
page?.excerpt,
|
|
page?.lead
|
|
);
|
|
const parentOpenGraph = (await parent)?.openGraph ?? {};
|
|
let images = [];
|
|
if (page?.featuredImage && page.featuredImage.url) {
|
|
images.push(page.featuredImage.url);
|
|
}
|
|
if (page?.logo && page.logo.url) {
|
|
images.push(page.logo.url);
|
|
}
|
|
const openGraph = {
|
|
...parentOpenGraph,
|
|
title: title,
|
|
description: description,
|
|
images: images,
|
|
};
|
|
|
|
return { title, description, openGraph };
|
|
}
|