export type TwitterCardType =
| "summary"
| "summary_large_image"
| "app"
| "player";
// Link interface matching astro-seo's Link (which extends HTMLLinkElement)
// href must be string (not URL) to match astro-seo's expectations
export interface Link {
rel?: string;
href?: string; // Only string, not URL
hreflang?: string;
media?: string;
type?: string;
sizes?: string;
prefetch?: boolean;
crossorigin?: string;
as?: string;
[key: string]: any;
}
export interface Meta {
property?: string;
name?: string;
content?: string;
httpEquiv?: string;
charset?: string;
[key: string]: any;
}
export interface SeoProperties {
title?: string;
titleTemplate?: string;
titleDefault?: string;
charset?: string;
description?: string;
canonical?: URL | string;
nofollow?: boolean;
noindex?: boolean;
languageAlternates?: {
href: URL | string;
hrefLang: string;
}[];
openGraph?: {
basic: {
title: string;
type: string;
image: string;
url?: URL | string;
};
optional?: {
audio?: string;
description?: string;
determiner?: string;
locale?: string;
localeAlternate?: string[];
siteName?: string;
video?: string;
};
image?: {
url?: URL | string;
secureUrl?: URL | string;
type?: string;
width?: number;
height?: number;
alt?: string;
};
article?: {
publishedTime?: string;
modifiedTime?: string;
expirationTime?: string;
authors?: string[];
section?: string;
tags?: string[];
};
};
twitter?: {
card?: TwitterCardType;
site?: string;
creator?: string;
title?: string;
description?: string;
image?: URL | string;
imageAlt?: string;
};
extend?: {
link?: Partial[];
meta?: Partial[];
};
surpressWarnings?: boolean;
}