Bird
Raised Fist0
NextJSframework~5 mins

Structured data (JSON-LD) in NextJS

Choose your learning style10 modes available
Introduction

Structured data helps search engines understand your webpage better by adding clear information in a special format called JSON-LD.

You want your webpage to show rich results like stars or event details in Google search.
You have a product page and want to share product info like price and availability.
You run a blog and want to mark up articles with author and publish date.
You want to improve SEO by making your page content easier for search engines to read.
Syntax
NextJS
import Script from 'next/script';

export default function Page() {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Person",
    "name": "Jane Doe",
    "jobTitle": "Software Developer",
    "url": "https://janedoe.com"
  };

  return (
    <>
      <h1>About Jane</h1>
      <Script
        id="jsonld-person"
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
    </>
  );
}

Use the next/script component to safely add JSON-LD in Next.js pages.

Set type to application/ld+json and use dangerouslySetInnerHTML to insert JSON as a string.

Examples
This example shows JSON-LD for a product with price details.
NextJS
const jsonLd = {
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Coffee Mug",
  "offers": {
    "@type": "Offer",
    "price": "12.99",
    "priceCurrency": "USD"
  }
};
This example marks up an article with title, author, and publish date.
NextJS
const jsonLd = {
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to use JSON-LD",
  "author": {
    "@type": "Person",
    "name": "Jane Doe"
  },
  "datePublished": "2024-06-01"
};
Sample Program

This Next.js page shows a simple About section and includes JSON-LD structured data about Jane using the next/script component.

NextJS
import Script from 'next/script';

export default function AboutPage() {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Person",
    "name": "Jane Doe",
    "jobTitle": "Software Developer",
    "url": "https://janedoe.com"
  };

  return (
    <main>
      <h1>About Jane</h1>
      <p>Jane is a software developer who loves teaching coding.</p>
      <Script
        id="jsonld-person"
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
    </main>
  );
}
OutputSuccess
Important Notes

Always validate your JSON-LD using tools like Google's Rich Results Test to avoid errors.

Keep JSON-LD data up to date with your page content for best SEO results.

Summary

Structured data in JSON-LD format helps search engines understand your page content.

In Next.js, use the next/script component to add JSON-LD safely.

This improves your chances of rich search results and better SEO.

Practice

(1/5)
1. What is the main purpose of adding JSON-LD structured data in a Next.js page?
easy
A. To improve server response time
B. To help search engines understand the page content better
C. To add interactive animations to the page
D. To style the page with custom CSS

Solution

  1. Step 1: Understand JSON-LD role

    JSON-LD is a format for structured data that helps search engines understand the content of a webpage.
  2. Step 2: Identify its use in Next.js

    In Next.js, JSON-LD is used to improve SEO by providing clear data to search engines, not for styling or animations.
  3. Final Answer:

    To help search engines understand the page content better -> Option B
  4. Quick Check:

    JSON-LD purpose = SEO improvement [OK]
Hint: JSON-LD is for SEO, not styling or animations [OK]
Common Mistakes:
  • Confusing JSON-LD with CSS or JavaScript animations
  • Thinking JSON-LD speeds up server response
  • Assuming JSON-LD changes page appearance
2. Which is the correct way to include JSON-LD structured data in a Next.js component?
easy
A.
B.
C.
D.

Solution

  1. Step 1: Use Next.js Script component

    Next.js provides the Script component from next/script to safely add scripts including JSON-LD.
  2. Step 2: Use dangerouslySetInnerHTML correctly

    JSON-LD must be added as a string inside dangerouslySetInnerHTML to avoid React escaping it.
  3. Final Answer:

    <Script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} /> -> Option C
  4. Quick Check:

    Use Next.js Script + dangerouslySetInnerHTML [OK]
Hint: Use Next.js Script with dangerouslySetInnerHTML for JSON-LD [OK]
Common Mistakes:
  • Using lowercase <script> tag directly in JSX
  • Not using dangerouslySetInnerHTML for JSON-LD
  • Forgetting to import Script from next/script
3. Given this Next.js code snippet, what will be the rendered output in the HTML?
import Script from 'next/script';

const data = {"@context": "https://schema.org", "@type": "Person", "name": "Alice"};

export default function Page() {
  return (
    <>
      <h1>Profile</h1>
      <Script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />
    </>
  );
}
medium
A.

Profile

B.

Profile

C.

Profile

D.

Profile

Solution

  1. Step 1: Understand Script output

    The Next.js Script component renders a <script> tag with the specified type and inner HTML.
  2. Step 2: Check JSON-LD content

    The JSON-LD data is stringified and inserted as raw JSON inside the script tag with type application/ld+json.
  3. Final Answer:

    <h1>Profile</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"Person","name":"Alice"}</script> -> Option D
  4. Quick Check:

    JSON-LD script tag with stringified data [OK]
Hint: JSON-LD renders as script with type and stringified JSON [OK]
Common Mistakes:
  • Using wrong script type attribute
  • Rendering JSON object instead of string
  • Placing JSON inside curly braces in HTML output
4. What is wrong with this Next.js code for adding JSON-LD?
import Script from 'next/script';

const data = {"@context": "https://schema.org", "@type": "Organization", "name": "My Company"};

export default function Home() {
  return (
    <Script type="application/ld+json">{JSON.stringify(data)}</Script>
  );
}
medium
A. Using <Script> without dangerouslySetInnerHTML causes JSON to render as text, not script content
B. Missing import of React causes error
C. JSON.stringify should not be used inside Script
D. Script component must be self-closing

Solution

  1. Step 1: Check Script usage

    The Script component requires dangerouslySetInnerHTML to insert raw JSON-LD content inside the script tag.
  2. Step 2: Identify the error

    Passing JSON string as children renders it as text inside the script tag, which is invalid for JSON-LD.
  3. Final Answer:

    Using <Script> without dangerouslySetInnerHTML causes JSON to render as text, not script content -> Option A
  4. Quick Check:

    Use dangerouslySetInnerHTML for JSON-LD scripts [OK]
Hint: Always use dangerouslySetInnerHTML for JSON-LD in Script [OK]
Common Mistakes:
  • Passing JSON as children instead of dangerouslySetInnerHTML
  • Forgetting to stringify JSON data
  • Assuming Script auto-inserts raw JSON
5. You want to add multiple JSON-LD scripts for different entities on a Next.js page. Which approach correctly adds two JSON-LD scripts safely?
hard
A. Use two <Script> components each with type="application/ld+json" and dangerouslySetInnerHTML containing separate JSON objects
B. Combine both JSON objects into one and add a single <Script> with dangerouslySetInnerHTML
C. Add one <Script> with an array of JSON objects inside dangerouslySetInnerHTML
D. Add JSON-LD as inline JavaScript variables inside a single <Script> tag

Solution

  1. Step 1: Understand JSON-LD script requirements

    Each JSON-LD script tag should contain a single JSON object describing one entity for clarity and correctness.
  2. Step 2: Use multiple Script components

    In Next.js, you can safely add multiple Script components each with their own JSON-LD data using dangerouslySetInnerHTML.
  3. Final Answer:

    Use two <Script> components each with type="application/ld+json" and dangerouslySetInnerHTML containing separate JSON objects -> Option A
  4. Quick Check:

    Multiple Script tags with separate JSON-LD objects [OK]
Hint: Use separate Script tags for each JSON-LD object [OK]
Common Mistakes:
  • Putting multiple JSON objects in one script tag without array
  • Using arrays inside JSON-LD script which is invalid
  • Embedding JSON-LD as JS variables instead of script content
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard