Adding Structured Data in Next.js
Search engines use structured data to better understand the content of your page. Google recommends using JSON-LD format when describing structured data.
In this post I will show you how to set up structured data by adding a script of application/ld+json type to your Next.js site.
Adding Structured Data
Depending on your website — a blog, recipe site, product store — there are many different types of schemas you can use. Here’s the list of types on Schema.org for you to explore.
As an example, let’s use the following schema for a blog post page.
const structuredData = {
'@context': 'https://schema.org',
'@type': 'BlogPosting',
headline: 'Title of the blog post',
description: 'Description of the blog post',
author: [
{
'@type': 'Person',
name: 'John Doe',
},
],
datePublished: '2022-09-14T09:00:00.000Z',
};
Here’s how to implement this structured data in your Next.js project:
-
Create the following component in
src/components/StructuredData.jsx.import Head from 'next/head'; export default function StructuredData({ data }) { return ( <Head> <script key="structured-data" type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} /> </Head> ); }Let me explain what’s going on here:
dataprop lets you pass structured data to this componentHeadcomponent injects thescripttag into the<head>of HTML documentkeyattribute ensures that thisscripttag will be included in<head>exactly once without duplicatesdangerouslySetInnerHTMLandJSON.stringifyallows you to properly insertdataobject insidescript
Make sure that you trust whats coming from
dataand never usedangerouslySetInnerHTMLwith values that users of your application can manipulate. -
Use the
StructuredDatacomponent in a page component
import StructuredData from 'src/components/StructuredData';
export default function BlogPost({ post }) {
const structuredData = {
'@context': 'https://schema.org',
'@type': 'BlogPosting',
headline: post.title,
description: post.description,
author: [
{
'@type': 'Person',
name: post.author,
},
],
image: post.imageUrl,
datePublished: post.publishedAt,
};
return (
<>
<StructuredData data={structuredData} />
<article>
<h1>{post.title}</h1>
{post.content}
</article>
</>
);
}
Validating Your Structured Data
You can use Google’s Rich Results Test tool to validate if your pages have been set up with proper structured data.
You will need to deploy your website first and use the live URL. You can use Netlify or Vercel services to do this.
Or, inspect your site’s HTML in your browser while developing locally and copy the contents of the <script type="application/ld+json"> tag into the Rich Result Test tool.