surfads — play site
One surf-banner on account 00000 / site
fndn1 / channel c5496 / zone 3bahh, location
JOES_TESTING_SITE, keywords homepage. Web-component shape, no build
step — the integration 474 of the 578 counted estate sites use.
Size: 8x1 (from markup)
width/height are an aspect ratio, not pixels,
and both are observed attributes: each setAttribute mints a fresh totem and re-arms
the per-instance _bounce, so two writes must still produce exactly one new
auction. If 8x1 returns a 204 and 4x1 fills, the zone simply has no
8:1 creative — that is demand, not the SDK. 4x1 and 2x1 are what the
live estate actually runs.
What a good run looks like on this account
Read off the panel on the right. Expected, in order: 1 wave-script,
1 sdk-script, 1 geo, 1–2 publisher-config,
1 category-config, 1 event-track, 1 bid-request, then
— if the bid fills — 1 creative-asset, exactly 1 win,
exactly 1 impression, and data-zones-rendered="1".
Facts read from this account's live publisher config on 2026-09-04, so you can tell a real fault from expected behaviour:
commerceMediaEnabled: true,productFeedEnabled: true,geoTargetingEnabled: true,ipTargetingEnabled: true.reauctionEnabled: false— so there is no automatic second auction on this account, ever. Exactly onebid-requestper zone is the correct result, and arerenderevent would be the anomaly. The size buttons above are the only way to force another auction here.- No
excludedZonesand noexcludedLocationskeys, so nothing is excluded and an absentbid-requestcannot be blamed on exclusion. - No
brandTakeoverkey — absent, same as the live reference account. dynamicZones: {}is empty, sosurf-dynamic-zonehas nothing to resolve on this account. Do not add one here expecting a render.productCardTemplatecompiles to the empty string, so a product card or carousel on this account renders blank markup by design. Not a bug.clickThroughUrlTemplateis a constanthttps://surfside-ads-test.pages.dev/— every click leaves here.
Query-string switches
?accountId= ?siteId= ?channelId=
?locationId= ?zoneId= override config/sites.json for one
run, so a different zone needs a URL and not an edit.
?surf_debug=true turns on the SDK's own console logging — the only way to see the
warn-level "No bids" and template-compile messages.
?attrTiming=late sets the zone attributes after r.js loads,
exercising attributeChangedCallback/totem/_bounce instead of
connectedCallback. ?watchdog=30000 lengthens the per-zone render
deadline from 15s.
Reading a failure
The panel's per-kind HTTP statuses are the whole diagnosis. No
bid-request at all means the attributes never completed or the bot filter
no-opped the ads path — check ua in the status bar first.
bid-request 204 is a handled no-fill, and Chrome reports that empty 204 to the page
as net::ERR_ABORTED: misleading, not a transport failure.
publisher-config 403 silently prevents the api initialising, so no bid is ever
requested and nothing errors. A win without a matching impression, or
either firing more than once per filled bid, is a tracker-arithmetic fault and the thing this
page exists to catch.