You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

next-google-adsense

Package Overview
Dependencies
Maintainers
0
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

next-google-adsense

Next.js Google AdSense

1.0.13
latest
Source
npmnpm
Version published
Maintainers
0
Created
Source

NEXT-GOOGLE-ADSENSE

Weekly Download Tests MIT License   Donation

Add Google AdSense to your Next.js app.

This package is deeply inspired by nextjs-google-adsense.

Why I don't use nextjs-google-adsense directly? Because it only support Auto Ads and Responsive Display Ad. I want to use In-article Ads. So I decided to create a new package. (read 👾 Why next-google-adsense? for more details)

Give me a ⭐ if you like it.

🗝️ Features

  • Support SSR (Server-Side Rendering), SSG (Static Site Generation) and CSR (Client-Side Rendering)
  • Support TypeScript
  • Zero Dependencies
  • Theoretically support all AdSense AD types (see 🎨 Create a custom layout for more details)
  • Create ads.txt automatically (see Initialization / Verification for more details)

📑 Table of Contents

👾 Why next-google-adsense?

next-google-adsense (this)nextjs-google-adsense
TypeScript
Support Auto Ads
Support Display Ad
Support In-feed Ad
Support In-article Ad
Support Matched Content Ad
Dynamic ads.txt
Multiple ADs on one page⚠️*1

*1: According to the their documentation seems it is ok to use multiple ADs on one page. But I found that it will cause an error.

📦 Requirements

  • Next.js 11.0.0 or higher.
  • React 17.0.0 or higher.

🚀 Getting Started

Installation

npm install next-google-adsense

Visit the npm page.

Initialization / Verification 🍀

There are two ways to verify your site (of course you can implement both):

  • AdSense code snippet

    // pages/_app.tsx
    
    // import the module
    import { GoogleAdSense } from "next-google-adsense";
    
    const App = ({ Component, pageProps }) => {
      return (
        <>
          <GoogleAdSense publisherId="pub-XXXXXXXXXXXXXXXX" /> {/* 👈 16 digits */}
          {/* or */}
          <GoogleAdSense /> {/* if NEXT_PUBLIC_ADSENSE_PUBLISHER_ID is set */}
          <Component {...pageProps} />
        </>
      );
    };
    
    export default App;
    

    You can also add the publisherId as environment variable as NEXT_PUBLIC_ADSENSE_PUBLISHER_ID. The environment variable will override the prop if both are set.

  • Ads.txt snippet

    // package.json
    
    // ...
    "scripts": {
       "build": "next build && create-ads-txt", // 👈 if you want to create ads.txt automatically, recommended
       "create-ads-txt": "create-ads-txt" // 👈 if you want to create ads.txt manually
    },
    // ...
    

    ⚠️ Your old ads.txt will be overwritten during the generation process.

    You must set NEXT_PUBLIC_ADSENSE_PUBLISHER_ID as environment variable. The environment variable will be used to generate the ads.txt.

Usage 🎉

Auto Ads

If you decide to use Auto Ads, you are good to go. The ads will be automatically displayed on your page. (Setup Auto Ads)

Manual Ads

import { AdUnit } from "next-google-adsense";

const Page = () => {
  return (
    <>
       <AdUnit
        publisherId="pub-XXXXXXXXXXXXXXXX"  {/* 👈 16 digits */}
        slotId="XXXXXXXXXX"                 {/* 👈 10 digits */}
        layout="display"                    {/* See the API Reference for more options */}
        />
      {/* or */}
       <AdUnit                              {/* if NEXT_PUBLIC_ADSENSE_PUBLISHER_ID is set */}
        slotId="XXXXXXXXXX"
        layout="display"
        />

        <YourContent />
    </>
  );
};

export default Page;

📖 API Reference

Components

Initializes the Google AdSense.

<GoogleAdSense publisherId={string}>
ParameterOptionalTypeDefaultDescription
publisherIdYesstringn/aYou can skip this parameter if you set the environment variable NEXT_PUBLIC_ADSENSE_PUBLISHER_ID.

Manual AD.

<AdUnit publisherId={string} slotId={string} layout={"display" | "in-article" | "custom"} customLayout={JSX.Element}>
ParameterOptionalTypeDefaultDescription
publisherIdYesstringn/aYou can skip this parameter if you set the environment variable NEXT_PUBLIC_ADSENSE_PUBLISHER_ID.
slotIdNostringn/aGoogle AdSense Slot ID.
layoutYes"display" | "in-article" | "custom""display"The layout of the AD.
customLayoutYesJSX.Elementn/aThe custom layout of the AD. This parameter is required if layout is set to "custom".

🎨 Create a custom layout

No layout fits your needs? Let's create a custom layout.

Sample custom layout:

export const InFeedAd = () => {
  return (
    <ins
      className="adsbygoogle"
      style={{ display: "block" }}
      data-ad-format="fluid"
      data-ad-layout-key="<AD_LAYOUT_KEY>"
      data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
      data-ad-slot="XXXXXXXXXX"
    />
  );
};

How to convert the given html to a custom layout?

Example (provided by Google AdSense):

<script
  async
  src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-XXXXXXXXXXXXXXXX"
  crossorigin="anonymous"
></script>
<ins
  class="adsbygoogle"
  style="display:block"
  data-ad-format="fluid"
  data-ad-layout-key="<AD_LAYOUT_KEY>"
  data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
  data-ad-slot="XXXXXXXXXX"
></ins>
<script>
  (adsbygoogle = window.adsbygoogle || []).push({});
</script>
  • Remove all the <script> tags.

  • You will get the following html:

    <ins
      class="adsbygoogle"
      style="display:block"
      data-ad-format="fluid"
      data-ad-layout-key="<AD_LAYOUT_KEY>"
      data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
      data-ad-slot="XXXXXXXXXX"
    >
    </ins>
    
  • Convert the html to JSX:

    export const InFeedAd = () => {
      return (
        <ins
          className="adsbygoogle"
          style={{ display: "block" }}
          data-ad-format="fluid"
          data-ad-layout-key="<AD_LAYOUT_KEY>"
          data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
          data-ad-slot="XXXXXXXXXX"
        />
      );
    };
    
  • Done! You can now use the custom layout in your app.

    <AdUnit publisherId="<your-publisher-id>" slotId="<your-slot-id>" layout="custom" customLayout={InFeedAd}>
    

Full Code:

import { AdUnit } from "next-google-adsense";

export const InFeedAd = () => {
  return (
    <ins
      className="adsbygoogle"
      style={{ display: "block" }}
      data-ad-format="fluid"
      data-ad-layout-key="<AD_LAYOUT_KEY>"
      data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
      data-ad-slot="XXXXXXXXXX"
    />
  );
};

const Page = () => {
  return (
    <>
       <AdUnit
        publisherId="pub-XXXXXXXXXXXXXXXX"  {/* 👈 16 digits */}
        slotId="XXXXXXXXXX"                 {/* 👈 10 digits */}
        layout="custom"
        customLayout={InFeedAd}
        />

        <YourContent />
    </>
  );
};

🐛 Known Issues

  • Waiting for your report.

⭐ TODO

  • Add custom layout validation.

🤝 Contributing

Contributions are welcome! If you find a bug or have a feature request, please open an issue. If you want to contribute code, please fork the repository and submit a pull request.

Before you open a pull request, please make sure that you run npm run dev:test to make sure the code run as expected.

📝 License

This project is licensed under the MIT License - see the LICENSE file for details

☕ Donation

Love it? Consider a donation to support my work.

"Donation" <- click me~

Keywords

next.js

FAQs

Package last updated on 09 Mar 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.