跳到正文
原文
Google AI:DEV 作者专属(RSS)· Aleksander Sekowski·· 2 小时前AI 评分34

OpenRTB 中 cat 省略 cattax 时的校验问题:默认回退到 Taxonomy 1.0

2.2 cat Codes With Omitted cattax Validate. OpenRTB Defaults to Taxonomy 1.0.

AI 导读

OpenRTB 的 cat 字段在省略 cattax 时会按规范默认回退到已废弃的 IAB Content Taxonomy 1.0,而非从字符串格式推断分类体系。

正文

A CTV bid request ships site.content.cat as ["IAB1-7", "IAB19-6"] and omits content.cattax. The exchange accepts it. Your blocklist logic on bcat still assumes Content Taxonomy 1.0 because that is what the default says.

OpenRTB does not infer the taxonomy from the shape of the strings. It reads the integer selector, and when you omit that selector it assumes the oldest one on the list.

Two pairs, four fields, one mistake

Category targeting on the Content object still rides the cat plus cattax pattern OpenRTB inherited from AdCOM. cat, sectioncat, and pagecat are string arrays of category codes. cattax names which AdCOM List: Category Taxonomies those codes come from. If cattax is missing, the spec default is 1, IAB Content Category Taxonomy 1.0, which IAB Tech Lab deprecated years ago.

Content Taxonomy 2.2 and 3.x use different ids for the same show. A code that means "Television" under 2.2 is not the same node under 3.1. Valid JSON with 2.2-shaped ids and default cattax tells downstream systems to map those strings against the 1.0 table. Brand safety, contextual segments, and bcat/acat at the BidRequest root all inherit that scope through BidRequest.cattax, which defaults the same way.

OpenRTB 2.6-202501 added a parallel pair for genre: content.gtax and content.genres. gtax uses the same AdCOM taxonomy list. Default 9 is IAB Tech Lab Content Taxonomy 3.1. genres holds ids from the taxonomy gtax names, often the CTV Genre Mapping subset when gtax is omitted.

The failure mode I see in migration work is not a missing field. It is copying cat into genres, or reusing 2.2 category strings in both places, without updating cattax and gtax. The payload validates. Reporting shows the wrong vertical.

"content": {
  "title": "Late Night Recap",
  "cat": ["IAB1-7"],
  "genres": ["IAB1-7"]
}

Nothing in JSON Schema stops that. genres under default gtax 9 expects genre ids from the 3.1 mapping, not a 2.2 category slug pasted twice.

acat, bcat, and the root selector

At the BidRequest root, acat (added in 2.6-202309) and bcat express allow- and block-lists of advertiser categories in the taxonomy named by BidRequest.cattax. The spec recommends sending only one of acat or bcat. Both arrays are meaningless without the matching cattax integer; the default again is 1.0.

That is a separate object from site.content.cat, but the same rule applies: the taxonomy integer is the contract, not the string format.

How you catch it

An agent implementing AdCP, ARTF, or AAMP can emit a bid request, the RPC returns OK, and the OpenRTB object is still scoped wrong. The wire contract does not move.

I work on RTBlint for OpenRTB, ARTF envelopes, and AdCP discovery. For this bug, run the request against the dated snapshot you actually trade on (for gtax/genres, at least 2.6-202501):

$ rtblint validate request.json --version 2.6-202501

Use the bid request tester when you want a paste-and-check loop. Invalid cattax values (for example an enum the AdCOM list does not define) surface as value errors on the path that carries them. Version rules flag fields your counterparty's snapshot does not know yet, including content.gtax and content.genres on older trains.

An implementation that lets a model emit the payload still has to check it. RTBlint is that check for the OpenRTB object. It is independent of IAB Tech Lab and of AAO; it is not an official harness and the spec does not require it.

Where to go next

If you are migrating off free-text content.genre, read the OpenRTB 2.6-202501 field review for how gtax defaults and how the genres type errata in 2.6-202505 split string versus integer arrays between spec sections.

The acat addition rule documents when allowlists entered the BidRequest root and how they relate to bcat.

AdCOM is where the taxonomy enums live now that 2.6 dropped inline lists; the AdCOM guide on RTBlint is the map from cattax/gtax integers to list names.

On the creative side, VAST Category elements carry an authority URL for the same reason: the code string is not self-describing. Content taxonomy authority and shareable reports walks through matching authority to the id set you emit on a tag, which is the same discipline as setting cattax on the bid request. When the win becomes a VAST URL, paste it into the VAST tag tester for preview and tracking, and run the VAST inspector if wrappers sit between your player and the inline.

Before you trust a partner's genre targeting on CTV inventory, confirm three integers explicitly: BidRequest.cattax for block/allow lists, content.cattax for page content categories, and content.gtax for genres. Defaults are not a safe migration strategy.

来源:Google AI:DEV 作者专属(RSS) · dev.to