A grid at the end of an article can feel like a natural pause: the reader has finished the page, the layout has room, and an ad does not cut a command or paragraph in half. That is the sweet spot Multiplex is designed to monetize. The implementation is simple HTML; the thoughtful work is choosing eligible pages, preserving layout, respecting consent, and knowing what “working” actually looks like.

Deployment map

  • Manual Multiplex unit → you choose the exact template location and unit code.

  • Multiplex Auto ads → Google chooses eligible in-page locations after you enable the format.

  • Related articles → your CMS/theme/recommendation service selects first-party content; this is not an AdSense unit.

  • Page exclusions → suppress Auto ads on exact URLs or path sections; they do not remove manual units.

  • Server-side conditions → decide which templates print the loader and manual slot.

Prerequisites before creating a unit

  • An active AdSense account and a site with Ready status.

  • Original publisher content that complies with Google Publisher and AdSense Program policies.

  • Access to the site’s templates, CMS ad manager, or deployment system.

  • A working consent/CMP configuration for applicable regions.

  • Correct ads.txt authorization and crawler-accessible public pages.

  • A staging or low-risk placement for initial responsive and performance testing.

Create the manual Multiplex unit

  1. Sign in to AdSense and open Ads.

  2. Open By ad unit and choose Multiplex ads.

  3. Give the unit a name that identifies site, template, position, and purpose.

  4. Choose responsive sizing unless a tested fixed container is required.

  5. Preview the style and grid at representative dimensions.

  6. Save the unit and copy the exact code AdSense generates.

Name the unit for operations, not decoration

  • A useful name resembles site-article-end-multiplex-responsive.

  • The name should let reporting and incident responders find the template without opening source code.

  • Do not encode temporary campaign claims into a long-lived placement name.

  • Keep production, staging, AMP, and experimental units distinct.

  • Record the unit ID, owner, creation date, template, rollout, and rollback condition.

Load the AdSense library once

document head (use account-generated code)html
<script async
  src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-REPLACE_WITH_YOUR_ID"
  crossorigin="anonymous"></script>

The loader is shared infrastructure

  • Replace the placeholder with the publisher client ID supplied by the account.

  • async avoids blocking HTML parsing while the external script downloads.

  • crossorigin="anonymous" matches Google’s current generated loader form.

  • Install one loader through the template, approved plugin, or tag deployment—not one copy for every unit.

  • Audit Site Kit, themes, plugins, tag managers, and hard-coded snippets for duplicates.

Place the Multiplex slot

article-end template (example shape)html
<ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-REPLACE_WITH_YOUR_ID"
     data-ad-slot="REPLACE_WITH_YOUR_SLOT_ID"
     data-ad-format="autorelaxed"></ins>
<script>
  (adsbygoogle = window.adsbygoogle || []).push({});
</script>

Copy identifiers; do not invent them

  • adsbygoogle identifies the element processed by the loader.

  • data-ad-client is the publisher ID and must match the account.

  • data-ad-slot identifies this unit and comes from AdSense.

  • autorelaxed requests the Multiplex/native grid format.

  • The push call queues this slot for processing; repeated pushes on the same element cause errors.

A safe WordPress placement pattern

wp-content/mu-plugins/article-multiplex.phpphp
<?php
/** Plugin Name: Article-end Multiplex placement */
 
function site_can_show_article_multiplex(): bool {
    return is_singular( 'post' )
        && ! is_preview()
        && '1' !== get_post_meta(
            get_queried_object_id(),
            '_disable_ads',
            true
        );
}
 
function site_render_article_multiplex(): void {
    if ( ! site_can_show_article_multiplex() ) {
        return;
    }
 
    // Render the exact Multiplex <ins> and push code from AdSense here.
}

Centralize eligibility before markup

  • is_singular('post') restricts the unit to individual posts.

  • is_preview() keeps editorial previews ad-free.

  • The post-meta switch allows reviewed exceptions without scattering slug arrays.

  • get_queried_object_id() identifies the current post after WordPress has parsed the query.

  • Call the render function from a controlled theme hook/template location; a parent-theme update should not erase the rule.

Choose the placement around reader intent

  • After the article and before comments is a common end-of-journey position.

  • A sidebar can work on wide screens but may disappear or move far down on mobile.

  • Keep ads away from navigation, download buttons, form controls, image galleries, and anything that can cause accidental taps.

  • Never break a code block, terminal workflow, table, mathematical proof, or paragraph with a unit.

  • Separate editorial related posts and Multiplex visually and label each accurately.

  • Do not place ads on empty, login, error, checkout, private-message, or navigation-only screens.

Responsive grid customization

optional attributes inside the Multiplex <ins>html
data-matched-content-rows-num="4,2"
data-matched-content-columns-num="1,2"
data-matched-content-ui-type="image_stacked,image_stacked"
data-ad-format="autorelaxed"

The old-looking attribute names are still documented

  • Google retains data-matched-content-* names for Multiplex layout controls.

  • The example requests a 4×1 mobile grid and a 2×2 desktop grid.

  • Rows, columns, and UI type must be configured together.

  • Google can adjust the grid when the container cannot fit the requested arrangement.

  • The documented grid must contain between 1 and 30 ads; invalid combinations can render blank.

  • Start with generated responsive code and customize only when measurement proves a need.

Protect Core Web Vitals

  • Reserve a responsive minimum height close to the expected grid so content does not jump when ads arrive.

  • Avoid an oversized fixed placeholder that becomes a permanent blank gap during no-fill or blocked states.

  • Load the global script asynchronously and do not wrap it in unsupported delay/rewrite logic.

  • Keep the initial above-the-fold article content and LCP element dominant.

  • Test INP around consent UI and ad insertion, CLS during load/resize, and mobile horizontal overflow.

  • Prevent ad containers from expanding across unrelated sticky/navigation regions.

  • Use the consent platform and Google guidance appropriate to the visitor’s region.

  • Do not print/request the unit before consent when the deployed policy requires it to wait.

  • Test new visitors, returning choices, consent changes, and unavailable CMP states.

  • Avoid caching one visitor’s consent-dependent HTML and serving it to another.

  • Document how Consent Mode, personalized/non-personalized ads, and denied storage signals are configured.

  • An empty ad caused by denied consent can be correct behavior.

Verify ads.txt and crawlers

diagnostic shellbash
curl -sSIL https://example.com/ads.txt
curl -sS https://example.com/ads.txt | grep 'pub-REPLACE_WITH_YOUR_ID'
curl -sS https://example.com/robots.txt
HTTP/2 200
content-type: text/plain
google.com, pub-..., DIRECT, f08c47fec0942fa0
... robots rules ...

Serving prerequisites live outside the slot

  • The root ads.txt should be reachable and authorize the exact publisher ID.

  • A soft-404 HTML page with status 200 is not a valid ads.txt response.

  • Mediapartners-Google and Google-Display-Ads-Bot need access to eligible pages/content.

  • CDN/WAF bot challenges can break crawlers even when your browser succeeds.

  • AdSense may take days to reflect ads.txt changes and longer on low-request sites.

Enable Multiplex Auto ads instead

  1. Open Ads and choose Edit beside the Ready site.

  2. Turn on Auto ads.

  3. Under In-page formats, enable Multiplex ads.

  4. Review ad load, excluded areas, page exclusions, and the site preview.

  5. Apply the settings or use an available experiment where allowed.

  6. Keep the loader on every page eligible for Auto ads and allow up to an hour for changes to propagate.

Manual and automatic placement differ

  • Auto ads chooses locations from page structure and configured formats.

  • Manual units remain where your template renders them.

  • Turning off Multiplex Auto ads does not remove a manual Multiplex slot.

  • Page exclusions override Auto ads but not custom/manual code.

  • Review total ad density when both manual units and Auto ads are enabled.

Migrate an old Matched Content unit

  • Expect it to be ads-only; the own-site recommendation service ended in March 2022.

  • Inventory every old unit, code path, hostname, template, and responsive override.

  • Compare its live attributes with current AdSense documentation and account-generated code.

  • Remove headings such as “Related articles” if the grid contains ads rather than editorial links.

  • Build a separate first-party related-post module if retaining readers is still a goal.

  • Replace or remove the old unit through a staged deployment; do not blindly duplicate a new unit beside it.

Browser verification without clicking ads

  • View source: confirm one loader and the intended slot/client/slot IDs.

  • Elements: verify the slot is placed after the correct article and not nested in an invalid container.

  • Network: inspect AdSense requests after consent settles and distinguish blocked/cancelled/no-fill behavior.

  • Console: look for duplicate-push, parameter, CSP, and script errors.

  • Responsive mode plus physical devices: verify columns, text/image layout, overflow, spacing, and CLS.

  • Ad blocker/no-fill/consent denied: the page must remain coherent with no giant gap.

  • Never click your own live ad or ask a tester to click it.

A source-level smoke check

diagnostic shellbash
curl -sSL https://example.com/article/   | grep -Eo 'pagead2.googlesyndication.com|data-ad-slot="[^"]+"|data-ad-format="[^"]+"'
pagead2.googlesyndication.com
data-ad-slot="1234567890"
data-ad-format="autorelaxed"

Static HTML evidence is limited

  • The command confirms known strings in server-delivered HTML.

  • It does not execute JavaScript, consent logic, tag managers, or client-side rendering.

  • A matching slot does not prove an auction, fill, policy eligibility, or correct visual layout.

  • Redact account identifiers before attaching raw source to a public ticket.

  • Use browser and AdSense reporting evidence for the remaining layers.

Why Multiplex appears blank

  • The site/unit/settings are new and still propagating.

  • The publisher ID, slot ID, loader, push call, or responsive parameters are wrong.

  • Consent prevents the request.

  • Ad blocker, DNS filtering, CSP, browser privacy, CDN, or firewall blocks ad hosts.

  • The container is hidden, detached, too narrow, zero-sized, or inside invalid markup.

  • The unit is pushed twice or the loader is duplicated.

  • No eligible demand is available or ad serving is limited by account/page/policy status.

  • Requested row/column totals are outside documented limits.

Measure the right outcomes

  • Use AdSense ad-format and placement-method reporting to isolate Multiplex.

  • Track impressions, revenue, RPM, viewability, coverage, and click behavior with consistent ranges.

  • Watch article completion, internal related-post CTR, next-page sessions, exit rate, CLS, LCP, and consent rate.

  • Segment device class, placement, content type, geography, and traffic source.

  • Use a controlled experiment rather than attributing a seasonal revenue change to one unit.

  • Remove or redesign a profitable unit if it harms trust, accessibility, policy compliance, or the core task.

Account for the June 2026 metric change

  • Annotate the reporting change in dashboards and incident thresholds.

  • Avoid direct pre/post comparison of ad requests, matched requests, request CTR, and coverage without adjusting definitions.

  • Use impressions, revenue, pageviews, and placement context alongside request metrics.

  • Update forecasts and alerts that assumed one request per unit.

Policy and UX release gate

  • Publisher content remains the focal point and outnumbers ads/paid promotion.

  • The placement cannot be mistaken for navigation, a download, a message, or first-party related content.

  • Consent and disclosures match the deployed regions and vendors.

  • Excluded/private/low-value/transactional screens cannot print the unit.

  • Mobile layout, accessibility, no-fill, and ad-block behavior remain usable.

  • No one interacted with live ads during QA.

  • An owner will review policy/product changes and placement performance periodically.

Primary references