sanity-plugin-seo
Version:
Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.
123 lines (122 loc) • 2.92 kB
TypeScript
import { Image } from "sanity";
export type HreflangEntry = {
locale: string;
url: string;
};
export type SchemaOrgData = {
schemaType?: string;
name?: string;
description?: string;
url?: string;
image?: string;
datePublished?: string;
dateModified?: string;
author?: string;
price?: string;
priceCurrency?: string;
availability?: string;
ratingValue?: string;
ratingCount?: string;
startDate?: string;
endDate?: string;
location?: string;
faqItems?: Array<{
question: string;
answer: string;
}>;
};
export type Seo = {
type: string;
nofollowAttributes?: boolean;
robotsMeta?: string[];
metaTitle?: string;
metaDescription?: string;
metaImage?: Image;
focusKeyword?: string;
seoKeywords?: Array<{
type?: string;
}>;
hreflang?: HreflangEntry[];
schemaOrg?: SchemaOrgData;
openGraph?: {
image?: Image;
title?: string;
description?: string;
siteName?: string;
};
additionalMetaTags?: Array<{
type?: string;
metaAttributes?: Array<{
type?: string;
attributeKey?: string;
attributeType?: string;
attributeValueImage?: Image;
attributeValueString?: string;
}>;
}>;
twitter?: {
cardType?: string;
creator?: string;
site?: string;
handle?: string;
};
seoStatus?: "draft" | "review" | "approved";
seoReviewNotes?: string;
};
/** Shape of the seo object returned by a GROQ query — use in your frontend project */
export interface SeoData {
metaTitle?: string;
metaDescription?: string;
nofollowAttributes?: boolean;
robotsMeta?: string[];
focusKeyword?: string;
seoKeywords?: string[];
metaImage?: {
asset?: {
url?: string;
};
};
openGraph?: {
title?: string;
description?: string;
siteName?: string;
image?: {
asset?: {
url?: string;
};
};
};
twitter?: {
cardType?: string;
site?: string;
creator?: string;
handle?: string;
};
hreflang?: {
locale: string;
url: string;
}[];
schemaOrg?: {
schemaType?: string;
name?: string;
description?: string;
url?: string;
author?: string;
datePublished?: string;
dateModified?: string;
price?: string;
priceCurrency?: string;
availability?: string;
ratingValue?: string;
ratingCount?: string;
startDate?: string;
endDate?: string;
location?: string;
faqItems?: {
question: string;
answer: string;
}[];
};
seoStatus?: "draft" | "review" | "approved";
seoReviewNotes?: string;
}