GA4 Cookies Values Explained(2026)

Google Analytics BCS 4 years ago (2023-01-17) 38278 Views 8 Comments
文章目录[隐藏]

Update time: May 30, 2026

If you’ve ever opened your browser’s developer tools while debugging GA4 tracking and stared at a list of cookies like _ga, *ga*<container-id>, or FPID without knowing what each part means… you’ve come to the right place.

GA4 uses up to four main cookies to handle user identification, session management, and cross-site tracking. But the expiration you see in the documentation doesn’t always match what you’ll find in practice, and the structure of each cookie can look like alphabet soup at first glance.

In this guide, I’ll break down each GA4 cookie — what it does, what its value actually means, and when you’ll encounter it — using real examples.

GA4 Cookie Overview

Here’s a quick reference table for the four main GA4 cookies:

Cookie name Default expiration time What it does
_ga 2 years Distinguishes users
_ga_<container-id> 2 years  Persists session state
FPID 2 years  Distinguishes users (server-side)
FPLC 20 hours Enables cross-domain tracking (server-side)

Note: GA4 cookies are configured with a 2-year expiration by default, but most browsers cap first-party cookies at 400 days (~13 months). In practice, the effective cookie lifetime is usually around 400 days, not 2 years.

 

_ga Cookie Explained

By default, GA4 assigns a unique Client ID to each device. That Client ID is stored in the _ga cookie. Here’s what it looks like:

GA1.1.1197596843.1673515099

The value after GA1.1. — in this case, 1197596843.1673515099 — is the Client ID.

Let’s break each part down:

Value Description
GA1 Version number (cookie format version)
1 Domain level (GA4 almost always uses 1)
1197596843 Random 10-digit number
1673515099 Timestamp of when the _ga cookie was created

So when you see GA1.1.1197596843.1673515099, you now know it means: version GA1, domain level 1, a random user identifier 1197596843, and that user was first seen at Unix timestamp 1673515099.

 

_ga_<container-id> Cookie Explained (Session Cookie)

The _ga_<container-id> cookie is GA4’s session cookie. It maintains the current session state. Here’s an example value:

GS2.1.s1673933110$o12$g0$t1673933110$j60$l0$h0$riYSmWx3uWvuJEDkCvwJCnvET7QcvFq7kg

GA4 Cookies Values Explained(2026)

That’s a lot of numbers. Let me walk through each field:

Value Description
GS Fixed identifier (Google Session).
2 Analysis version (commonly 1 or 2).
1 Domain level (almost always 1).
1673933110 Session ID — the start time of the current session
12 Session count for the user.
0 Engagement session flag (1 = engaged, 0 = not engaged).
1673933110 Current Timestamp
60 Countdown,60-second countdown, cookie and user data matching/syncing when Google Signals is enabled
0 User-ID status (1 = logged in with User-ID set).
0  Enhanced Client ID (ecid) — only has value with server-side tracking or User-ID + user-provided data collection enabled
riYSmWx3uWvuJEDkCvwJCnvET7QcvFq7kg This field is available when Google signals data collection is enabled and indicates the Google signals or the associated ID of the Google signals.

Important: On the very first request of a session, the Session ID and Current Timestamp will be identical — because the Session ID is the session start time.

 

FPID Explained (First-party Device ID)

FPID (First-party Device ID) only comes into play with server-side GTM. If you’re using client-side GA4 only, you won’t see it.

Here’s an example FPID value:

FPID2.2.F99Fd7gVuQuP93MZdJiEn07o/eZba6j9bAt8ETLsn8E=.1733280703

Note that F99Fd7gVuQuP93MZdJiEn07o/eZba6j9bAt8ETLsn8E=.1733280703 is also treated as a form of Client ID in GA4’s backend.

Let’s break it down:

Value Description
FPID2.2 Version number
F99Fd7gVuQuP93MZdJiEn07o Core user identifier
eZba6j9bAt8ETLsn8E= Additional security or validation data
1733280703 Timestamp

 

FPLC Explained

You may also encounter a cookie named FPLC. It’s the less-talked-about cousin of FPID, so let me explain why it exists and what it does.

GA4 Cookies Values Explained(2026)

 

Why FPLC Exists

FPID is set as HttpOnly, which means GTM and JavaScript cannot read it. That’s good for security, but it creates a problem: without JavaScript access, you can’t use FPID for cross-domain tracking.

That’s where FPLC comes in.

 

What FPLC Does

  • FPLC is a hashed value derived from the FPID
  • It is not HttpOnly, so JavaScript can access it
  • It enables cross-domain tracking in GA4 when using server-side tagging
  • It has a short lifetime of 20 hours

Think of FPLC as the JavaScript-readable bridge that makes cross-domain user stitching possible when you’re on a server-side setup. Without it, a user moving from example.com to checkout.example-pay.com would look like two different people.

 

Final Words

I hope this guide helped you make sense of GA4’s cookie structure. Cookies like _ga, *ga*<container-id>, FPID, and FPLC might look cryptic at first, but once you know what each segment means, they become a lot less intimidating.

If you’re debugging tracking issues or setting up cross-domain or server-side tracking, understanding these cookies will save you a lot of head-scratching.

Like (17)
Post my comment
Cancel comment
Expression Bold Strikethrough Center Italic

Hi, you need to fill in your nickname and email!

  • Nickname (required)
  • Email (required)
  • Website
(8) friends in the comments
  1. Is the new change to the GS2 cookie affecting anyone's session tracking? Also, do we have any official docs from Google about this change? Thanks1
    hungry_ramen2025-05-13 22:36 Reply Mac OS X | Chrome 136.0.0.0
    • It does not affect session tracking, it just changes the structure of the cookie _ga_, the value does not change. But if you use the Measurement Protocol to track and get the session id from the cookie _ga_, it will be affected, after all, its structure has changed. Google did not update this change in the document
      BCS2025-05-14 08:41 Reply Mac OS X | Chrome 136.0.0.0
  2. We're seeing some GS2 cookies; would be great if you could update for those as well.
    b2025-04-24 20:21 Reply Windows 10 | Firefox浏览器 137.0
    • Already added
      BCS2025-04-29 09:19 Reply Mac OS X | Chrome 135.0.0.0
  3. Hi! For some reason, my last comment got all bad-formatted. There's also missing information. I will write again here and have also sent you an email with the correct formating. My apologies. ⠀ .<counter of 60 countdowns that when reset instructs the sending of hits to td(dot)doubleclick(dot)net/td/ga/rul, www(dot)google(dot)/ads/ga-audiences, stats(dot)g(dot)doubleclick(dot)net/g/collect - purpose: cookie and user data matching/syncing when Google Signals is enabled (maybe when Google Ads is linked to the account as well)> ⠀ . ⠀ . String(Math.round(Math.random() * 2147483647)); it is placed in the hit when the User-provided data collection feature is enabled in the property, and there is no point in disabling it as it does not change anything>
    giovaniortolani2025-01-16 22:20 Reply Linux | Chrome 131.0.0.0
    • Thanks, I know I'm missing something. Maybe my website limits the length of comments?
      BCS2025-01-17 10:34 Reply Mac OS X | Chrome 131.0.0.0
  4. Hello! Thanks for the article. To collaborate and help the community, I also want to share my findings regarding the last 3 fields of the _ga_ cookie. <counter of 60 that when reset instructs to send hits to td(dot)doubleclick(dot)net/td/ga/rul, www(dot)google(dot)/ads/ga-audiences, stats(dot)g(dot)doubleclick(dot)net/g/collect - purpose: cookie and user data matching/syncing when Google Signals is enabled (maybe when Google Ads is linked to the account too)> String(Math.round(Math.random() * 2147483647)); is placed in the hit when the User-provided data collection feature is activated in the property, and there is no point in disabling it as it does not change anything>
    giovaniortolani2025-01-15 23:10 Reply Linux | Chrome 131.0.0.0
    • Thanks for your mention. For counter of 60, I tested and it works when Google Signal is turned on.
      BCS2025-01-16 09:11 Reply Mac OS X | Chrome 131.0.0.0