diff --git a/errors/next-script-for-ga.mdx b/errors/next-script-for-ga.mdx index 7d88d62e80..75d1009dd1 100644 --- a/errors/next-script-for-ga.mdx +++ b/errors/next-script-for-ga.mdx @@ -1,95 +1,75 @@ --- -title: Next Script for Google Analytics +title: Using Google Analytics with Next.js (through `next/script`) --- > Prefer `next/script` component when using the inline script for Google Analytics. ## Why This Error Occurred -An inline script was used for Google analytics which might impact your webpage's performance. +An inline script was used for Google Analytics which might impact your webpage's performance. Instead, we recommend using `next/script` through the `@next/third-parties` library. ## Possible Ways to Fix It -#### Using gtag.js (recommended) +#### Use `@next/third-parties` to add Google Analytics -If you are using the [gtag.js](https://developers.google.com/analytics/devguides/collection/gtagjs) script to add analytics, use the `next/script` component with the right loading strategy to defer loading of the script until necessary. +**`@next/third-parties`** is a library that provides a collection of components and utilities that improve the performance and developer experience of loading popular third-party libraries in your Next.js application. It is available with Next.js 14 (install `next@latest`). -```jsx filename="pages/index.js" -import Script from 'next/script' +The `GoogleAnalytics` component can be used to include [Google Analytics +4](https://developers.google.com/analytics/devguides/collection/ga4) to your page via the Google tag (`gtag.js`). By default, it fetches the original scripts after hydration occurs on the page. -function Home() { +> **Recommendation**: If Google Tag Manager is already included in your application, you can +> configure Google Analytics directly using it, rather than including Google Analytics as a separate component. Refer to the [documentation](https://developers.google.com/analytics/devguides/collection/ga4/tag-options#what-is-gtm) +> to learn more about the differences between Tag Manager and `gtag.js`. + +To load Google Analytics for all routes, include the component directly in your root layout and pass in your measurement ID: + +```tsx filename="app/layout.tsx" switcher +import { GoogleAnalytics } from '@next/third-parties/google' + +export default function RootLayout({ + children, +}: { + children: React.ReactNode +}) { return ( -
- -
+ + {children} + + ) } - -export default Home ``` -#### Using analytics.js (legacy) +```jsx filename="app/layout.js" switcher +import { GoogleAnalytics } from '@next/third-parties/google' -If you are using the [analytics.js](https://developers.google.com/analytics/devguides/collection/analyticsjs) script to add analytics: - -```jsx filename="pages/index.js" -import Script from 'next/script' - -function Home() { +export default function RootLayout({ children }) { return ( -
- -
+ + {children} + + ) } - -export default Home ``` -If you are using the [alternative async variant](https://developers.google.com/analytics/devguides/collection/analyticsjs#alternative_async_tag): +To load Google Analytics for a single route, include the component in your page file: -```jsx filename="pages/index.js" -import Script from 'next/script' +```jsx filename="app/page.js" +import { GoogleAnalytics } from '@next/third-parties/google' -function Home() { - return ( -
- -