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.
110 lines (105 loc) • 2.51 kB
text/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;
// FAQ
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;
};
// Pro workflow
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;
}