Files
HowDoYouConvert/hdyc-svelte/src/lib/seo.ts
2026-03-07 23:23:09 +00:00

47 lines
1.2 KiB
TypeScript

export const SITE_URL = 'https://howdoyouconvert.com';
export const SITE_NAME = 'HowDoYouConvert.com';
export const DEFAULT_ROBOTS = 'index,follow';
export const DEFAULT_TWITTER_CARD = 'summary';
type OpenGraphType = 'website' | 'article';
type SeoInput = {
title: string;
description: string;
pathname: string;
type?: OpenGraphType;
};
const normalizePathname = (pathname: string): string => {
const pathWithSlash = pathname.startsWith('/') ? pathname : `/${pathname}`;
const normalized = pathWithSlash.replace(/\/{2,}/g, '/');
if (normalized.length > 1 && normalized.endsWith('/')) {
return normalized.slice(0, -1);
}
return normalized;
};
export const canonicalUrl = (pathname: string): string => `${SITE_URL}${normalizePathname(pathname)}`;
export const buildSeoMeta = ({ title, description, pathname, type = 'website' }: SeoInput) => {
const canonical = canonicalUrl(pathname);
return {
canonical,
robots: DEFAULT_ROBOTS,
og: {
type,
title,
description,
url: canonical,
siteName: SITE_NAME,
},
twitter: {
card: DEFAULT_TWITTER_CARD,
title,
description,
},
};
};
export const toJsonLd = (value: unknown): string => JSON.stringify(value).replace(/</g, '\\u003c');