The Script component helps you add external scripts safely and easily in your Next.js app.
Script component for third-party scripts in NextJS
import Script from 'next/script'; <Script src="https://example.com/script.js" strategy="lazyOnload" onLoad={() => console.log('Script loaded!')} />
The src attribute sets the URL of the external script.
The strategy controls when the script loads: beforeInteractive, afterInteractive, or lazyOnload.
<Script src="https://example.com/script.js" strategy="beforeInteractive" />
<Script src="https://example.com/script.js" strategy="afterInteractive" />
<Script src="https://example.com/script.js" strategy="lazyOnload" />
<Script id="custom-script" strategy="afterInteractive"> {`console.log('Inline script running')`} </Script>
This example shows how to add Google Analytics scripts using the Next.js Script component. The first Script loads the external GA library after the page is interactive. The second Script runs inline code to initialize GA tracking.
import React from 'react'; import Script from 'next/script'; export default function Home() { return ( <> <h1>Welcome to My Site</h1> <Script src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID" strategy="afterInteractive" /> <Script id="google-analytics" strategy="afterInteractive" > {`window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'GA_MEASUREMENT_ID');`} </Script> </> ); }
Use the strategy prop to control when scripts load for better performance.
Always add an id prop for inline scripts to avoid duplication.
Scripts added with the Script component are automatically optimized by Next.js.
The Script component safely loads third-party scripts in Next.js.
Use strategy to control script loading timing.
Supports both external and inline scripts with easy syntax.
Practice
Script component in Next.js?Solution
Step 1: Understand the role of the Script component
The Script component is designed to load third-party scripts safely in Next.js apps.Step 2: Identify what it controls
It allows control over when the script runs using thestrategyprop, improving performance and safety.Final Answer:
To safely load third-party scripts with control over when they run -> Option BQuick Check:
Script component purpose = safe third-party script loading [OK]
- Confusing Script with styling or rendering components
- Thinking Script replaces all JavaScript
- Assuming Script manages server rendering
Solution
Step 1: Recall the official import path
The Script component is imported from the 'next/script' package in Next.js.Step 2: Check each option
Only import Script from 'next/script'; uses the correct import path and syntax.Final Answer:
import Script from 'next/script'; -> Option AQuick Check:
Correct import path = 'next/script' [OK]
- Importing from 'react' instead of 'next/script'
- Using incorrect package names like 'nextjs/script'
- Using named import instead of default import
import Script from 'next/script';
export default function Page() {
return (
<>
Solution
Step 1: Understand the 'lazyOnload' strategy
The 'lazyOnload' strategy loads the script after the main page load, so it doesn't block rendering.Step 2: Analyze the component output
Thedivwith 'Hello World' renders immediately, while the script loads in the background.Final Answer:
The script loads after the page has loaded, and 'Hello World' is displayed immediately -> Option AQuick Check:
lazyOnload = script loads after page [OK]
- Thinking script blocks rendering
- Confusing strategy names
- Assuming script never loads
import Script from 'next/script';
export default function Page() {
return (
<>
Welcome
</>
);
}Solution
Step 1: Check how inline scripts are added
Inline scripts in Next.js Script component require the 'dangerouslySetInnerHTML' prop, not children.Step 2: Verify the given code
The code incorrectly places JavaScript code as children, which is invalid and causes an error.Final Answer:
Script component cannot have children; inline scripts require the 'dangerouslySetInnerHTML' prop -> Option DQuick Check:
Inline scripts need dangerouslySetInnerHTML [OK]
- Putting inline JS code as children inside Script
- Assuming strategy names are invalid
- Thinking src is mandatory for all Script uses
Solution
Step 1: Understand the strategies
'afterInteractive' loads scripts after the page is interactive, suitable for user-triggered loading.Step 2: Apply conditional rendering
Render the Script component only after user interaction (like a button click) to delay loading until needed.Final Answer:
Use strategy="afterInteractive" and conditionally render Script after user click -> Option CQuick Check:
Conditional afterInteractive = user-triggered load [OK]
- Using lazyOnload which loads regardless of user action
- Using beforeInteractive which loads too early
- Assuming worker strategy runs scripts like normal
Ready to prove it?
Pass the test and this pattern moves unknown
