МОСТ. Справка

Google Consent Mode gcs/gcd: расшифровка параметров согласия

Опубликовано 15 окт. 2026 г.14 мин чтенияДля продвинутых
Запрос тега распадается на короткий трёхсимвольный код и длинную двенадцатисимвольную строку рядом с ключом-дешифратором
What you'll learn
  • Где живут gcs и gcd и что кодирует каждый параметр
  • Официальная матрица G1-- для gcs прямо из актуальной документации Google
  • Схема gcd из 12 символов: версия, четыре пары согласия, маркер, хвост
  • Все девять букв согласия и три имплицитных маркера, сверенные с публичным декодером
  • Как читать оба параметра в server-side GTM и где ручной парсинг перестаёт быть безопасным
Advanced
1views

Каждый хит Google-тега - collect-запрос GA4, пинг Google Ads или Floodlight, syndication-запрос - несёт состояние согласия в query string через параметры Google Consent Mode gcs/gcd: gcs с коротким кодом статуса и gcd с детальным. Чтобы прочитать gcs, хватит одной официальной таблицы. С gcd сложнее: Google объясняет, зачем нужен параметр, но не публикует его кодировку, поэтому схема ниже взята из реверс-инжиниринга аналитиков и сверена с публичным декодером. Здесь оба параметра consent mode разобраны значение за значением, и показано, где ручную расшифровку пора остановить.

Google-теги добавляют оба параметра к исходящим запросам. Вы встретите их на хитах /g/collect от GA4, на измерительных пингах Google Ads и Floodlight, на syndication-запросах - везде, где Google-тег отправляет событие. В server-side GTM те же значения приходят в event data под префиксными именами x-ga-gcs и x-ga-gcd, рядом с dma и dma_cps - двумя параметрами, которые несут DMA-согласие для сервисов Google.

У параметров разные задачи, и путаница между ними - самая частая ошибка при чтении:

ПараметрЧто кодируетДокументирован GoogleДлина
gcsитоговое состояние только ad_storage + analytics_storageда, формат и значения4 символа
gcdвсе четыре сигнала: ad_storage, analytics_storage, ad_user_data, ad_personalization, плюс то, как задано каждое состояниеназначение да, кодировка нет10 или 12 символов

Раз gcs покрывает только два сигнала, страница может отправить gcs=G100, пока gcd того же хита показывает ad_user_data разрешённым после апдейта. Полная картина согласия живёт в gcd. gcs - короткий статус с обратной совместимостью, который consent mode отдаёт с самой первой версии.

Что Google документирует о gcs и gcd

Всё остальное держится на трёх официальных утверждениях. Первое: гайд по отладке согласия даёт формат gcs и полную таблицу значений: «Проверяйте параметр gcs= в URL, чтобы узнать статус согласия. Формат параметра gcs: gcs=G1 [ad_storage][analytics_storage]» - Google, Consent debugging guide. Второе: обзор consent mode сообщает, что параметр gcd «всегда отправляется в сервисы Google, независимо от того, внедрён consent mode или нет» - Consent mode overview. Третье: тот же обзор предупреждает: «Поля Google-тега могут кодироваться для более эффективной передачи. Эти поля могут меняться».

Именно из-за третьей фразы вообще появилось целое направление реверс-инжиниринга. Google так и не опубликовал алфавит gcd, поэтому схему из следующих разделов восстановил Markus Baersch (на английском её опубликовал Simo Ahava), уточнил шаблон-парсер David Vallejo, а проверка шла через публичный decode API того же Vallejo. У каждого утверждения в гайде указан источник: официальная документация, реверс-инжиниринг или гипотеза.

Как читать gcs: матрица G1--

Официальная таблица из актуального гайда по отладке согласия:

ЗначениеЧто сообщает
G100Согласие запрещено по обоим сигналам
G101Аналитика разрешена, реклама запрещена
G110Реклама разрешена, аналитика запрещена
G111Согласие разрешено по обоим сигналам
G1--Сайту согласие на эти два сигнала не требовалось

За пределами таблицы есть ещё два случая. Если параметра gcs нет вовсе, consent mode не внедрён или теги блокируются ещё до срабатывания - это базовая настройка consent mode, где теги при запрете просто не грузятся. В живом трафике встречается и префикс в нижнем регистре вроде g110: парсеры нормализуют регистр, потому что смысл несут только две цифры после G1.

Параметр отражает итоговое состояние - дефолтное, слитое с апдейтом, если он был. Пользователь, отклонивший баннер, остаётся на G100, а принявший переводит тот же хит в G111. Региональные решения о согласии сводятся в то же итоговое значение.

Как устроен gcd: 12 символов состояния согласия

Схема ниже - консенсус реверс-инжиниринга: её документирует шаблон Vallejo, и ответы публичного декодера с ней сходятся:

1    3t           3t                3t            3t                 5    l1
version ad_storage analytics_storage ad_user_data ad_personalization marker tail

По позициям:

ПозицииСодержимоеЗначение
1цифра версии1 во всех строках, что попадались до сих пор
2-9четыре пары согласияпо паре на сигнал, по порядку: ad_storage, analytics_storage, ad_user_data, ad_personalization
10цифра-маркер5 в большей части трафика; встречаются и 6, и 1
11-12необязательный хвост«container scoped defaults» в трактовке Vallejo; есть в строках текущего формата, нет в старых

Каждая пара согласия состоит из двух символов: первый - маркер имплицитного согласия, второй - буква состояния, в которой зашиты дефолт и апдейт. Так 13t3t3t3t5l1 читается как «имплицитно разрешено, разрешено по дефолту, апдейта нет» на всех четырёх сигналах. Публичный декодер принимает 12-символьные строки. 10-символьные значения из трафика 2023 года - та же схема без имплицитных маркеров на отдельной позиции и без хвоста, и их всё ещё можно расшифровать вручную по таблице букв ниже.

Что значат буквы в gcd: девять состояний

Буква состояния стоит на чётных позициях строки: 2, 4, 6 и 8. Это таблица, которую Baersch опубликовал через Simo Ahava, с примерами из реального трафика:

БукваЧитается какДефолтАпдейтТипичная строка
lсигнал не настроен через consent modeне заданне задан11l1l1l1l1 - consent mode отсутствует
pзапрет по дефолту, баннер не тронутзапрещённет11p1p1p1p5 - advanced mode до клика по баннеру
qотказ, подтверждённый апдейтомзапрещёнзапрещён13q3q3q3q5 - пользователь отклонил всё
rсогласие после запрета по дефолтузапрещёнразрешён13r3r3r3r5 - пользователь принял всё
tразрешено по дефолтуразрешённет13t3t3t3t5 - взаимодействие с баннером не нужно
uсогласие отозвано пользователемразрешёнзапрещён11u1u1u1u5 - пользователь отозвал согласие
vразрешено и подтверждено апдейтомразрешёнразрешён13v3v3v3v5
mзапрет апдейтом без дефолтане заданзапрещён11p1m1p1p5 - настроен только один сигнал
nразрешение одним только апдейтомне заданразрешён11n1n1n1n5 - сайт так и не задал дефолт

Благодаря группировке таблицу можно вычислить, заучивать её не обязательно. Каждая буква - позиция в алфавите base64url, а младшие четыре бита делятся на два поля: (index >> 2) & 3 даёт дефолт, index & 3 - апдейт, где 2 значит «запрещено», а 3 - «разрешено»:

l = index 21: low four bits 0101 - default 1, update 1: not set
p = index 25: low four bits 1001 - default 2, update 1: denied, no update
q = index 26: low four bits 1010 - default 2, update 2: denied, denied
r = index 27: low four bits 1011 - default 2, update 3: denied, granted
t = index 29: low four bits 1101 - default 3, update 1: granted, no update

Мнемоника «три на три» из статей сообщества сжимает ту же таблицу. Ряд алфавита задаёт дефолт: l-m-n - нет дефолта, p-q-r - запрещено, t-u-v - разрешено. Место внутри ряда задаёт апдейт: первая буква - апдейта нет, вторая - запрещено, третья - разрешено.

Что значат нечётные позиции: маркеры имплицитного согласия

Весь 2023 год большинство строк выглядели как 11p1p1p1p5 - имплицитная позиция 1, которую декодер возвращает как незаданную. В 2024-м Google-теги начали массово слать 13t3t3t3t5: та же схема, только с имплицитной 3. Поле implicit, которое публичный декодер отдаёт по каждому сигналу, подтверждает соответствие: 1 расшифровывается как «не задано», 3 - как «разрешено», 2 - как «запрещено».

Поэтому строка вроде 13r3r3r2r5 показывает пользователя, который принял всё, при том что ad_personalization несёт имплицитный запрет. Источники из сообщества связывают этот паттерн с отказами через Global Privacy Control и производными сигналами.

Самая тёмная часть формата - то, что семантически значит «имплицитно разрешено». Шаблон Vallejo читает позицию 10 как маркер Global Privacy Controls, а хвост - как container scoped defaults; в комментариях к материалам Baersch хвост трактуют ровно наоборот. Считайте обе версии гипотезами: декодер отдаёт поля global_privacy_control и containerDefaults, и на строках, проверенных для этого гайда, оба остались пустыми.

Как gcs и gcd описывают одно и то же состояние

Возьмём сайт с consent mode, где по дефолту всё запрещено, и посетителя, который принимает баннер. Хит тогда несёт gcs=G111 и значения вида gcd=13r3r3r3r5l1: буквы r значат «запрещено по дефолту, разрешено апдейтом», что в сумме даёт разрешение - ровно то, что говорит G111. До клика по баннеру тот же сайт отправляет gcs=G100 с gcd=11p1p1p1p5: p - запрет без апдейта, и G100 с этим согласен. Сайт, которому согласие не нужно, шлёт G1--, а gcd всё равно расписывает четыре сигнала, ставя буквы l там, где ничего не настроено.

Официальный текст это соответствие нигде не описывает, так что оно остаётся результатом реверс-инжиниринга. Зато оно выполняется на каждой строке, которую мы прогнали через декодер для этого гайда, и даёт быструю проверку на здравый смысл. Если на хите gcs и первые две пары gcd расходятся, сломана сама настройка согласия.

Как расшифровать gcd за минуту

Частые значения и их расшифровка, каждая проверена через декодер:

gcdРасшифровка
11l1l1l1l1consent mode не настроен; цифра 1 в хвосте помечает старую версию
11p1p1p1p5всё запрещено по дефолту, апдейта нет - advanced mode, баннер не тронут
13r3r3r3r5пользователь разрешил всё после запрета по дефолту
13q3q3q3q5пользователь подтвердил отказ при запрете по дефолту
13t3t3t3t5всё разрешено по дефолту, апдейт не нужен
13v3v3v3v5дефолтное разрешение подтверждено апдейтом
11u1u1u1u5дефолтное разрешение отозвано пользователем
11r1r1l1l5настроены только ad_storage и analytics_storage, оба приняты
11l1p1l1l5по дефолту запрещён только analytics_storage
13q3v3q3q5смешанный случай: отказ по трём сигналам, аналитика разрешена и дефолтом, и апдейтом
13r3r3r2r5пользователь разрешил всё, но ad_personalization несёт имплицитный запрет
13t3t3t3t5l1текущий 12-символьный формат с хвостом

Инструменты - в том порядке, в каком за них стоит браться:

  1. Tag Assistant - отладчик, который официально рекомендует Google. Он показывает состояние согласия без всякого чтения строк. Гайд Google по отладке предостерегает от вызова команды consent из custom HTML-тега, так что если состояние на странице выглядит неправильно, сначала подозревайте настройку, а уже потом параметры.
  2. Публичный decode-эндпоинт - один запрос на одну строку:
bash
curl -s "https://openapi.analytics-debugger.com/v1/google/consent/decode/13r3r3r3r5l1?mode=full"
  1. Шаблон переменной для server-side GTM, чтобы расшифровывать локально: парсер Analytics Debugger или шаблон consent-state от dpezrez, который работает без исходящих запросов. Toolbox Lukas Wojcik делает то же самое в браузере, отдельно для gcs и для gcd.

Как проверить gcs и gcd в server-side GTM

Server-side tracking переносит точку проверки из браузера на ваш собственный эндпоинт, и оба параметра едут с каждым пересылаемым событием - те же значения, что браузерный тег поставил в исходящий запрос. В контейнере server-side tracking event data несёт их под префиксными именами, поэтому быстрая проверка выглядит так:

  1. Откройте нужный клиент в превью серверного контейнера или залогируйте event data временной переменной.
  2. Найдите x-ga-gcs: до решения по баннеру ждите G100, после согласия - G111. Если x-ga-gcs на хитах GA4 нет, запрос, скорее всего, так и не прошёл через состояние согласия веб-тега.
  3. Найдите x-ga-gcd и расшифруйте его по таблице букв выше. Здесь ловится случай, который тест баннера пропускает: ad_user_data или ad_personalization в другом состоянии, чем ad_storage.
  4. Если значения в веб-контейнере и серверном контейнере различаются, сверьтесь с чек-листом из гайда по миграции на server-side GTM. Почему два слоя могут расходиться вполне законно, разобрано в материале server-side tracking против браузерного пикселя.

Шаблоны сообщества, включая шаблоны stape, отдают те же префиксные поля как переменные - от имён в query string они отличаются только префиксом. Без серверного контейнера оба параметра можно прочитать прямо во вкладке Network браузера на любом запросе /g/collect, и для теста баннера этого обычно хватает. Более полный контекст согласия для cookieless-измерений описан в гайде по cookieless-атрибуции.

Почему не стоит парсить gcd в продакшен-логике

Формат уже менялся дважды: строки 2023 года были длиной 10 символов, в 2024-м добавились имплицитные маркеры и хвост до 12 символов, а у цифры-маркера появились варианты помимо 5. Гайд Baersch говорит прямо: «Это внутренние параметры Google. Их значения могут измениться без предупреждения». Парсер в продакшен-теге, шаблон на продажу или отчёт для комплаенса молча сломается на следующем сдвиге формата.

Ещё три пробела не дают считать строку источником истины. functionality_storage, personalization_storage и security_storage не попадают ни в один из параметров, так что распарсенный gcd не докажет полного покрытия согласия. Семантика имплицитных маркеров и хвоста держится на консенсусе сообщества, официального описания у неё нет. А региональные варианты согласия дают строки, которых в таблицах сообщества пока нет.

Для всего, что грозит последствиями по комплаенсу, берите инструменты, сделанные под эту задачу: Tag Assistant для состояния согласия на странице и собственное зафиксированное состояние согласия как гейт доставки. Дисциплина «храним то, на что согласился посетитель, и отправляем только совпадающее» разобрана в гайде по first-party данным и согласию. Параметры нужны для проверки, а ваша consent-платформа - для контроля исполнения.

Частые вопросы о gcs и gcd

Frequently asked questions

Sources

Sources

Проверяйте согласие там, где идёт доставка
  • Смотрите, что уходит из вашего стека: Pixel Activator отправляет проверяемые тестовые события, чтобы вы могли изучить каждое поле согласия, которое передаёт ваша доставка.
  • Завязывайте доставку на реальное состояние согласия: Most передаёт зафиксированное состояние согласия с каждым событием и придерживает то, что отправлять нельзя.
Was this guide helpful?
Author
Most Team
Справочная служба

Официальные руководства и глоссарий для платформы Most и Активатора пикселей.

Похожие руководства

Как учесть first-party data consent в серверной доставке

Серверная очередь не узнаёт выбор посетителя автоматически. Свяжите запись выбора, событие и правила приёмника, чтобы можно было объяснить каждую отправку.

4 мин

Как сохранить event time при задержках и смене часового пояса

Правильно оформленная отметка времени может обозначать неверный момент. Сравните источник, очередь и запрос, прежде чем искать ошибку в окне отчёта.

4 мин

Как устроена миграция TikTok Events API на единый эндпоинт

Как проходит миграция TikTok Events API на единый /event/track/ для веба, приложений, офлайна и CRM. Проверим схему источника и доступ к API, затем отделим получение запроса от сопоставления, дедупликации и атрибуции. Для веба разберём связку с Pixel.

5 мин

Задержки Meta CAPI: как найти причину до изменения интеграции

Задержки Meta CAPI могут возникать на разных этапах. Проследите конверсию от действия пользователя и очереди отправки до Test Events, Events Manager и Ads Manager, чтобы понять причину расхождения до изменения интеграции.

10 мин