# COPPA (Child-Directed Sites)

Source: https://docs.ezoic.com/docs/privacy/coppa/


## 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()`:

```html
<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.

```html
<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.

## Recommended setup for child audiences


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](/docs/mobileapps/android/#setting-consent-manually) and [iOS](/docs/mobileapps/ios/#setting-consent-manually) SDK docs.

