next-seo
Version:
SEO plugin for Next.js projects
208 lines (204 loc) • 5.7 kB
TypeScript
import { ReactNode } from 'react';
interface OpenGraphMedia {
url: string;
width?: number;
height?: number;
alt?: string;
type?: string;
secureUrl?: string;
}
interface OpenGraphVideoActors {
profile: string;
role?: string;
}
interface OpenGraph {
url?: string;
type?: string;
title?: string;
description?: string;
images?: ReadonlyArray<OpenGraphMedia>;
videos?: ReadonlyArray<OpenGraphMedia>;
audio?: ReadonlyArray<OpenGraphMedia>;
defaultImageHeight?: number;
defaultImageWidth?: number;
locale?: string;
siteName?: string;
site_name?: string;
profile?: OpenGraphProfile;
book?: OpenGraphBook;
article?: OpenGraphArticle;
video?: OpenGraphVideo;
}
interface OpenGraphProfile {
firstName?: string;
lastName?: string;
username?: string;
gender?: string;
}
interface OpenGraphBook {
authors?: ReadonlyArray<string>;
isbn?: string;
releaseDate?: string;
tags?: ReadonlyArray<string>;
}
interface OpenGraphArticle {
publishedTime?: string;
modifiedTime?: string;
expirationTime?: string;
authors?: ReadonlyArray<string>;
section?: string;
tags?: ReadonlyArray<string>;
}
interface OpenGraphVideo {
actors?: ReadonlyArray<OpenGraphVideoActors>;
directors?: ReadonlyArray<string>;
writers?: ReadonlyArray<string>;
duration?: number;
releaseDate?: string;
tags?: ReadonlyArray<string>;
series?: string;
}
interface Twitter {
handle?: string;
site?: string;
cardType?: string;
}
interface MobileAlternate {
media: string;
href: string;
}
interface LanguageAlternate {
hrefLang: string;
href: string;
}
interface LinkTag {
rel: string;
href: string;
hrefLang?: string;
media?: string;
sizes?: string;
type?: string;
as?: string;
crossOrigin?: string;
imagesrcset?: string;
imagesizes?: string;
referrerpolicy?: string;
integrity?: string;
keyOverride?: string;
color?: string;
}
interface BaseMetaTag {
content: string;
keyOverride?: string;
}
interface HTML5MetaTag extends BaseMetaTag {
name: string;
property?: undefined;
httpEquiv?: undefined;
}
interface RDFaMetaTag extends BaseMetaTag {
property: string;
name?: undefined;
httpEquiv?: undefined;
}
interface HTTPEquivMetaTag extends BaseMetaTag {
httpEquiv: "content-security-policy" | "content-type" | "default-style" | "x-ua-compatible" | "refresh";
name?: undefined;
property?: undefined;
}
type MetaTag = HTML5MetaTag | RDFaMetaTag | HTTPEquivMetaTag;
type ImagePrevSize = "none" | "standard" | "large";
interface AdditionalRobotsProps {
nosnippet?: boolean;
maxSnippet?: number;
maxImagePreview?: ImagePrevSize;
maxVideoPreview?: number;
noarchive?: boolean;
unavailableAfter?: string;
noimageindex?: boolean;
notranslate?: boolean;
}
interface NextSeoProps {
title?: string;
titleTemplate?: string;
defaultTitle?: string;
themeColor?: string;
noindex?: boolean;
nofollow?: boolean;
robotsProps?: AdditionalRobotsProps;
description?: string;
canonical?: string;
mobileAlternate?: MobileAlternate;
languageAlternates?: ReadonlyArray<LanguageAlternate>;
openGraph?: OpenGraph;
facebook?: {
appId: string;
};
twitter?: Twitter;
additionalMetaTags?: ReadonlyArray<MetaTag>;
additionalLinkTags?: ReadonlyArray<LinkTag>;
}
interface DefaultSeoProps extends NextSeoProps {
dangerouslySetAllPagesToNoIndex?: boolean;
dangerouslySetAllPagesToNoFollow?: boolean;
defaultOpenGraphImageWidth?: number;
defaultOpenGraphImageHeight?: number;
defaultOpenGraphVideoWidth?: number;
defaultOpenGraphVideoHeight?: number;
norobots?: boolean;
}
/**
* Generate SEO meta tags for NextSeo component
* Use this when you want to add SEO tags directly in Next.js <Head>
* without using the NextSeo component wrapper
*
* @example
* ```tsx
* import Head from 'next/head';
* import { generateNextSeo } from 'next-seo/pages';
*
* export default function Page() {
* return (
* <>
* <Head>
* {generateNextSeo({
* title: "My Page Title",
* description: "My page description"
* })}
* </Head>
* <h1>Page Content</h1>
* </>
* );
* }
* ```
*/
declare function generateNextSeo(props: NextSeoProps): ReactNode[];
/**
* Generate default SEO meta tags for DefaultSeo component
* Use this when you want to set global SEO defaults directly in Next.js <Head>
* without using the DefaultSeo component wrapper
*
* @example
* ```tsx
* // pages/_app.tsx
* import Head from 'next/head';
* import { generateDefaultSeo } from 'next-seo/pages';
*
* export default function MyApp({ Component, pageProps }) {
* return (
* <>
* <Head>
* {generateDefaultSeo({
* titleTemplate: "MySite | %s",
* defaultTitle: "MySite",
* description: "Default site description"
* })}
* </Head>
* <Component {...pageProps} />
* </>
* );
* }
* ```
*/
declare function generateDefaultSeo(props: DefaultSeoProps): ReactNode[];
export { type AdditionalRobotsProps, type BaseMetaTag, type DefaultSeoProps, type HTML5MetaTag, type HTTPEquivMetaTag, type ImagePrevSize, type LanguageAlternate, type LinkTag, type MetaTag, type MobileAlternate, type NextSeoProps, type OpenGraph, type OpenGraphArticle, type OpenGraphBook, type OpenGraphMedia, type OpenGraphProfile, type OpenGraphVideo, type OpenGraphVideoActors, type RDFaMetaTag, type Twitter, generateDefaultSeo, generateNextSeo };