View as Markdown

COPPA (Child-Directed Sites)

Overview

The Children's Online Privacy Protection Act (COPPA) is a US law that covers the online collection of personal information from children under 13.

In the Ezoic dashboard, Settings > Privacy has a My Site Has Content Intended for Minors setting, which marks your site as directed to children under 13. When it is on, Ezoic treats every pageview on the site as child-directed, for visitors worldwide.

What child-directed treatment does

On a child-directed pageview:

  • Ad requests are flagged as child-directed to all demand:
    • Google Ad Manager requests use child-directed treatment and non-personalized ads.
    • AdSense requests use non-personalized ads.
    • Prebid and Ezoic's own bidding requests are flagged coppa.
  • Header bidding still runs, but bidders may not sync users or read or write their own cookies or local storage.
  • Amazon bidding does not run.
  • Third-party identity providers (such as ID5, LiveIntent, and LiveRamp) do not run, and Ezoic does not set its identity cookies.
Revenue on child-directed pageviews is typically substantially lower, because only contextual, non-personalized ads can serve.

Setting it per visitor

If your own consent tool or age gate knows whether a specific visitor is a child (for example, a CMP that supports COPPA), you can tell Ezoic with ezstandalone.setIsChildDirected(isChildDirected). The function takes a boolean:

  • true: treat this visitor as child-directed, even if the site setting is off.
  • false: do not treat this visitor as child-directed, even if the site setting is on. Use this only for visitors your age gate or CMP has determined are 13 or older.
  • Any value that is not a boolean is ignored, and the site setting applies.

You are responsible for the accuracy of the value you pass.

Usage

Call ezstandalone.setIsChildDirected() before you call ezstandalone.showAds():

<script>
    window.ezstandalone = window.ezstandalone || {};
    ezstandalone.cmd = ezstandalone.cmd || [];
    ezstandalone.cmd.push(function () {
        ezstandalone.setIsChildDirected(true);
        ezstandalone.showAds(101, 102, 103);
    });
</script>

Setting the property directly

You can also set ezstandalone.childDirected directly. This works before any Ezoic script has loaded. Use this form if Ezoic serves your pages through a nameserver or Cloudflare integration, where the EzoicAds JavaScript showAds() flow isn't used.

<script>
    window.ezstandalone = window.ezstandalone || {};
    ezstandalone.childDirected = true; // or false
</script>

Place this as early as possible in the <head>, before Ezoic's scripts.

When the value takes effect

Ezoic reads the value when the page makes its first ad request. That value then applies to the whole pageview, including ad refreshes, lazy-loaded ads, and later showAds() calls.

If you change the value later in the pageview, the change applies from the next pageview. The exception is changing it to true, which takes effect right away for the page's subsequent ad requests.

If your CMP or age gate decides asynchronously, call setIsChildDirected() before showAds(), for example inside your CMP's callback. Otherwise the decision applies from the next pageview.

In a single-page application, the value persists for the life of the page.

If most of your audience is children, turn the site setting on and call setIsChildDirected(false) only for visitors you have verified are 13 or older, rather than leaving the setting off and calling setIsChildDirected(true) for children.

On sites integrated through Ezoic's nameserver or Cloudflare integration, some page-level scripts and cookies load with the page before the first ad request. Those follow the site setting, not the per-visitor value. With the site setting on, nothing child-sensitive loads before your value is read.

Mobile apps

The Ezoic mobile app SDKs pass your app's own COPPA flag, which you set with setSubjectToCOPPA(). See Setting consent manually in the Android and iOS SDK docs.