{"id":77813,"date":"2025-02-09T12:06:49","date_gmt":"2025-02-09T12:06:49","guid":{"rendered":"https:\/\/peraltafinancing.com\/analytics\/implementation-guide-for-events-in-google-analytics-4\/"},"modified":"2025-02-09T12:06:49","modified_gmt":"2025-02-09T12:06:49","slug":"implementation-guide-for-events-in-google-analytics-4","status":"publish","type":"post","link":"https:\/\/fivemor.com\/?p=77813","title":{"rendered":"Implementation Guide For Events In Google Analytics 4"},"content":{"rendered":"<p> <br \/>\n<\/p>\n<div>\n<p>On the surface, tracking <strong>events<\/strong> in <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\">Google Analytics 4<\/a> (GA4) is fairly simple. Events are, after all, pretty much the <em>only thing<\/em> you can collect in GA4.<\/p>\n<p>It\u2019s easy to get tied down with endless comparisons to Universal Analytics, though. While I\u2019m steadfastly opposed to the idea that GA4 should resemble Universal Analytics, it\u2019s still important to <em>cleanse the palate<\/em> and approach GA4\u2019s event tracking with an open mind.<\/p>\n<p>There are some comparisons that can be drawn between the new and the old, but what GA4 might lack in some features and use cases, it more than makes up for this with a more flexible data structure.<\/p>\n<p>In this <strong>implementation guide<\/strong>, I\u2019ll take a look at the <strong>structure<\/strong>, <strong>composition<\/strong>, <strong>implementation<\/strong>, and <strong>evaluation<\/strong> of Google Analytics 4 events.<\/p>\n<div style=\"aspect-ratio: 1792 \/ 1022;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/google-analytics-4-events-implementation-guide.jpg\" title=\"Events in Google Analytics 4\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1022\" width=\"1792\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/google-analytics-4-events-implementation-guide.jpg#ZgotmplZ\" alt=\"Events in Google Analytics 4\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>For more details on how events work in Google Analytics 4, do check out the following excellent resources:<\/p>\n<p>These resources outmatch anything I could create by a wide margin, so make sure you bookmark them and follow them religiously!<\/p>\n<blockquote>\n<p>This guide will be focused on data collection <strong>for the web<\/strong>, mainly using <strong>Google Tag Manager<\/strong>. While mobile app events and <code>gtag.js<\/code> implementations will be discussed in passing, I have chosen this particular focus due to the overwhelming popularity of Google Tag Manager as the primary means for collecting data to Google Analytics.<\/p>\n<\/blockquote>\n<p>                <span class=\"simmer\"><br \/>\n  <span class=\"close\">X<\/span><\/p>\n<p>\n    <span class=\"fa fa-md fa-bell\"\/><br \/>\n    <strong>The Simmer Newsletter<\/strong>\n  <\/p>\n<p>\n    Subscribe to the <a href=\"https:\/\/www.simoahava.com\/newsletter\/\">Simmer newsletter<\/a> to get the latest news and content from Simo Ahava into your email inbox!\n  <\/p>\n<p>  <\/span><\/p>\n<h2 id=\"structure-of-an-event\">Structure of an event<\/h2>\n<p>An event hit, when sent to GA4, comprises an <strong>event name<\/strong> and <strong>parameters<\/strong>.<\/p>\n<p>Furthermore, parameters can be divided into <strong>automatically collected parameters<\/strong> and <strong>custom parameters<\/strong>.<\/p>\n<p>For example, here is an event named <code>page_view<\/code>, sent with a bunch of parameters to GA4:<\/p>\n<div style=\"aspect-ratio: 1364 \/ 914;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-parameters-page-view.jpg\" title=\"Event parameters for page_view\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"914\" width=\"1364\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-parameters-page-view.jpg#ZgotmplZ\" alt=\"Event parameters for page_view\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>There are a handful of <em>special<\/em> (reserved) parameters collected for measurement, such as:<\/p>\n<ul>\n<li><code>tid<\/code> &#8211; Measurement ID<\/li>\n<li><code>sr<\/code> &#8211; Screen resolution<\/li>\n<li><code>_dbg<\/code> &#8211; Debug mode active<\/li>\n<li><code>seg<\/code> &#8211; User is considered engaged for this session<\/li>\n<\/ul>\n<blockquote>\n<p>There are more details about these automatically collected parameters in a <a href=\"#special-parameters\">later chapter<\/a>.<\/p>\n<\/blockquote>\n<p>I\u2019m also sending a couple of custom parameters:<\/p>\n<p>The prefix <code>epn<\/code> means a <em>number<\/em> parameter, whereas the prefix <code>ep<\/code> means a text parameter.<\/p>\n<p>Here\u2019s an example of an event that sends text parameters <strong>and<\/strong> <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/user-properties\">user properties<\/a> (prefixed with <code>up<\/code>):<\/p>\n<div style=\"aspect-ratio: 1356 \/ 508;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/another-event-example.jpg\" title=\"Event example\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"508\" width=\"1356\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/another-event-example.jpg#ZgotmplZ\" alt=\"Event example\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Note that GA4 <strong>batches<\/strong> events, so if you fire more than one event in a very short time window, the events will be sent together in a single hit:<\/p>\n<div style=\"aspect-ratio: 1480 \/ 414;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/batched-events.jpg\" title=\"Batched events\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"414\" width=\"1480\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/batched-events.jpg#ZgotmplZ\" alt=\"Batched events\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The hit above sent <em>two<\/em> events: a <code>page_view<\/code> event and a <code>scroll<\/code> event, both with some custom parameters.<\/p>\n<p>In this article, I\u2019ll help you come to terms with the terminology used above.<\/p>\n<h2 id=\"event-tag-in-google-tag-manager\">Event tag in Google Tag Manager<\/h2>\n<p>While Google Analytics 4 implementation via Google Tag Manager is still somewhat in beta (even if GA4 itself isn\u2019t), it\u2019s still more than possible to set an entire GA4 implementation up with GTM.<\/p>\n<p>GTM has two tag types for collecting data to Google Analytics 4.<\/p>\n<ul>\n<li>\n<p><strong>Google Analytics: GA4 Configuration<\/strong> &#8211; Recommended for GA4 data collection. Establishes the base settings and is used as the underlying configuration for event tags.<\/p>\n<\/li>\n<li>\n<p><strong>Google Analytics: GA4 Event<\/strong> &#8211; Tag type used for sending events to GA4.<\/p>\n<\/li>\n<\/ul>\n<div style=\"aspect-ratio: 1278 \/ 560;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/gtm-ga4-tags.jpg\" title=\"GTM's GA4 tags\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"560\" width=\"1278\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/gtm-ga4-tags.jpg#ZgotmplZ\" alt=\"GTM's GA4 tags\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>In order to send your custom event hits to GA4, you need to establish a <strong>configuration<\/strong> first. You can check out my <a href=\"https:\/\/www.simoahava.com\/analytics\/getting-started-with-google-analytics-app-web\/\">original guide<\/a> for some (slightly outdated) tips on how to do this. See also the <a href=\"#configuration-tag-and-events\">chapter below<\/a> for more details on how the configuration tag and event tags interact.<\/p>\n<p>Within the <strong>GA4 Event<\/strong> tag type, you have some fields and settings you can configure the tag with.<\/p>\n<div style=\"aspect-ratio: 1804 \/ 1574;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-tag-example.jpg\" title=\"Event tag example\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1574\" width=\"1804\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-tag-example.jpg#ZgotmplZ\" alt=\"Event tag example\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<table>\n<thead>\n<tr>\n<th>Setting<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Configuration Tag<\/strong><\/td>\n<td>If you want to use a configuration tag, you can select it here. Alternatively, you can ignore the configuration tag and just set a measurement ID manually.<\/td>\n<\/tr>\n<tr>\n<td><strong>Event Name<\/strong><\/td>\n<td>The <strong>name<\/strong> of the event as will be shown in GA4 reports. The recommended format is <code>snake_case<\/code>. Try to avoid using the same names as <a href=\"https:\/\/support.google.com\/analytics\/answer\/9234069\">automatically collected events<\/a> unless you know what you\u2019re doing.<\/td>\n<\/tr>\n<tr>\n<td><strong>Event Parameters<\/strong><\/td>\n<td>Add any parameters you want to send with the event to GA4. If you use a configuration tag, then any parameters set in that will also be applied to this hit (with the values fixed to what they were when the config tag was fired). Remember that if you want to use parameters in reports, you need to register them as <a href=\"https:\/\/support.google.com\/analytics\/answer\/10075209?hl=en&amp;ref_topic=9756175\">custom dimensions<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><strong>User Properties<\/strong><\/td>\n<td>Add any user properties you want to set with this event. User properties are similar to user-scoped custom dimensions in Universal Analytics: they apply to all future hits from this user, until a new value is set for each. You do need to register them in GA4 for them to be available in reports.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Once you\u2019ve configured the event name and the parameters to your liking, all you need to do is add a trigger to the tag and start collecting the data.<\/p>\n<blockquote>\n<p>If you\u2019re using Google Tag Manager\u2019s Preview mode to test your tag with (as you should), the hit will automatically have the <code>_dbg<\/code> parameter set, and you\u2019ll see it in <a href=\"https:\/\/support.google.com\/analytics\/answer\/7201382?hl=en\">DebugView<\/a>.<\/p>\n<\/blockquote>\n<h2 id=\"quotas-and-limits\">Quotas and limits<\/h2>\n<p>Unfortunately, GA4 events have some arbitrary, and frankly very annoying, quotas and limits that you need to be aware of. See <a href=\"https:\/\/support.google.com\/analytics\/answer\/9267744?hl=en&amp;ref_topic=9756175\">this article<\/a> for the full list.<\/p>\n<p>For example, you should avoid collecting <strong>more than 500<\/strong> unique event names in GA4. Even though this limit doesn\u2019t seem to be technically enforced (you can collect 500+ unique events), you\u2019re still in violation of a collection limit, and Google can start enforcing this limit at any time.<\/p>\n<p>Similarly, while you can collect more than 25 parameters in a single event tag, only 25 would be passed on to reporting.<\/p>\n<blockquote>\n<p>Note that even if you go over the quotas in event parameters and custom dimensions, they will still be passed through to the <a href=\"#bigquery-export-and-ga4-events\">BigQuery export<\/a>, which makes the BigQuery export a <strong>super<\/strong> valuable thing to set up in every single GA4 implementation!<\/p>\n<\/blockquote>\n<p>These quotas and limits will most likely change as the platform matures, so I recommend keeping the documentation bookmarked so that you aren\u2019t blindsided by changes that could impact your data quality.<\/p>\n<h2 id=\"enhanced-measurement\">Enhanced measurement<\/h2>\n<p><strong>Enhanced measurement<\/strong> is really neat. It takes a leaf out of <a href=\"https:\/\/ga-dev-tools.appspot.com\/autotrack\/\">autotrack.js\u2019<\/a> book, and with a few flavors from Google Tag Manager\u2019s triggers, and bakes it all into a simple, automated tracking tool orchestrated by <code>gtag.js<\/code> itself.<\/p>\n<p>Confused? Sorry about that. In short, enhanced measurement <strong>tracks stuff automatically<\/strong> just by adding the configuration tag to the page.<\/p>\n<p>Enhanced measurement is controlled from the GA4 <a href=\"https:\/\/support.google.com\/analytics\/answer\/9216061?hl=en\">admin settings<\/a>.<\/p>\n<div style=\"aspect-ratio: 2072 \/ 1284;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/enhanced-measurement.jpg\" title=\"Enhanced Measurement\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1284\" width=\"2072\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/enhanced-measurement.jpg#ZgotmplZ\" alt=\"Enhanced Measurement\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>If you enable enhanced measurement, the following events will be tracked automatically (assuming you don\u2019t disable them) &#8211; see the <a href=\"https:\/\/support.google.com\/analytics\/answer\/9216061?hl=en\">official documentation<\/a> for more details.<\/p>\n<ul>\n<li><code>page_view<\/code> &#8211; sent with the page load as well as browser history events with single-page apps.<\/li>\n<li><code>scroll<\/code> &#8211; sent when the user scrolls to the bottom of the page.<\/li>\n<li><code>click<\/code> &#8211; sent when the user clicks an <strong>outbound link<\/strong>.<\/li>\n<li><code>view_search_results<\/code> &#8211; sent when the user loads a page with a configured search query parameter.<\/li>\n<li><code>video_start<\/code>, <code>video_progress<\/code>, <code>video_complete<\/code> &#8211; sent automatically when the user starts to view a video, progresses past predefined percentages of the total video length, and reaches the end of the video.<\/li>\n<li><code>file_download<\/code> &#8211; sent when the user clicks a link to a file with one of the predefined extensions.<\/li>\n<\/ul>\n<p>Note that as these are, for all intents and purposes, <a href=\"#automatically-collected-events\">automatically collected events<\/a>, you can\u2019t change or modify the parameters sent with these hits. You can <em>add<\/em> parameters to them by setting them globally in a configuration tag, but check out this <a href=\"#configuration-tag-and-events\">later chapter<\/a> for some serious caveats to setting event parameters in a configuration tag!<\/p>\n<blockquote>\n<p>You can always opt-out of enhanced measurement tracking by modifying the GA4 data stream settings. For example, I\u2019m not a huge fan of the <code>scroll<\/code> event, so I never enable it &#8211; I\u2019d rather have full control over something as potentially spammy as scroll tracking.<\/p>\n<\/blockquote>\n<h2 id=\"bigquery-export-and-ga4-events\">BigQuery export and GA4 events<\/h2>\n<p>If you\u2019ve been reading my blog, you might have noticed that I\u2019m a <a href=\"https:\/\/www.simoahava.com\/tags\/bigquery\/\">huge fan<\/a> of Google BigQuery.<\/p>\n<p>One of the <strong>main reasons<\/strong> to stop reading this <em>right now<\/em> and go and implement GA4 is because it comes with a <a href=\"https:\/\/support.google.com\/analytics\/answer\/9358801?hl=en\"><strong>free BigQuery export of all your GA4 data<\/strong><\/a>!<\/p>\n<blockquote>\n<p>BigQuery itself has, naturally, costs associated with usage, but you don\u2019t have to pay <em>Google Analytics<\/em> for the privilege of accessing raw data in the export.<\/p>\n<\/blockquote>\n<div style=\"aspect-ratio: 2970 \/ 1420;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/bigquery-link.jpg\" title=\"BigQuery link\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1420\" width=\"2970\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/bigquery-link.jpg#ZgotmplZ\" alt=\"BigQuery link\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>For the purposes of <strong>event tracking<\/strong>, the BigQuery export has a huge, huge benefit.<\/p>\n<blockquote>\n<p>Quotas that would apply to events in reports do <strong>not<\/strong> apply to the data exported to BigQuery!<\/p>\n<\/blockquote>\n<p>In other words, if you\u2019ve reached the maximum number of custom dimensions, for example, all the custom parameters that you send to GA4 will still be exported into BigQuery.<\/p>\n<div style=\"aspect-ratio: 2630 \/ 1230;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/bigquery-data-example.jpg\" title=\"BigQuery data sample\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1230\" width=\"2630\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/bigquery-data-example.jpg#ZgotmplZ\" alt=\"BigQuery data sample\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>This means that you might end up with <strong>two different approaches<\/strong> to the data collected by a single platform.<\/p>\n<p>First is the data that\u2019s surfaced in the reporting UI. This is your everyday data &#8211; subject to quotas and limitations, but easy to manipulate and explore for useful insights.<\/p>\n<p>The second is the raw data in BigQuery. This is the data set that you can take, sculpt, engineer, extract, and manipulate however you wish. It lets you break free of the prescriptive schema imposed by GA4, and you can start to truly unravel the wonders of the event stream model.<\/p>\n<p>If you\u2019re curious about how BigQuery and GA4 play ball together, takes a look at <a href=\"https:\/\/www.simoahava.com\/analytics\/bigquery-query-guide-google-analytics-app-web\/\">this article<\/a> that Pawel Kapuscinski and I wrote!<\/p>\n<h2 id=\"event-types\">Event types<\/h2>\n<p>Considering that GA4 is basically an <em>event stream model<\/em>, it\u2019s not surprising that events themselves are categorized in a number of different ways.<\/p>\n<p>There are the <strong>automatically collected events<\/strong>, which GA4, one way or the other, collects without needing manual tagging.<\/p>\n<p>Then there are a bunch of <strong>recommended events<\/strong>, which Google strongly recommends you to use (if they are applicable for your measurement needs).<\/p>\n<p>Finally, if there are no automatically collected events or recommended events that suit your use case, you can always use <strong>custom events<\/strong>.<\/p>\n<h3 id=\"automatically-collected-events\">Automatically collected events<\/h3>\n<p>Automatically collected events are enumerated <a href=\"https:\/\/support.google.com\/analytics\/answer\/9234069\">in this document<\/a>. Both app (Firebase SDK) and web (Global Site Tag \/ Google Tag Manager) automatically collect some events, and if you\u2019ve enabled <a href=\"#enhanced-measurement\">enhanced measurement for the web stream<\/a>, even more events are collected without the need to manually tag the site.<\/p>\n<p>Just to reiterate &#8211; an event is an <em>automatically<\/em> collected event when it doesn\u2019t require adding a <em>manual<\/em> tag or code snippet for the data collection. Some automatically collected events collect additional parameters that help flesh out the event metadata.<\/p>\n<p>Here are the automatically collected events for the web:<\/p>\n<table>\n<thead>\n<tr>\n<th>Event name<\/th>\n<th>Description<\/th>\n<th>Trigger<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>click<\/code><\/td>\n<td>Outbound link collection (when enabled via enhanced measurement).<\/td>\n<td>Click on a link that leads out of the current domain.<\/td>\n<\/tr>\n<tr>\n<td><code>file_download<\/code><\/td>\n<td>File download tracking (when enabled via enhanced measurement).<\/td>\n<td>Click on a link that downloads a file with one of the predefined extensions.<\/td>\n<\/tr>\n<tr>\n<td><code>first_visit<\/code><\/td>\n<td>First visit from a given client \/ user ID.<\/td>\n<td>When an event is collected from a new client or user ID.<\/td>\n<\/tr>\n<tr>\n<td><code>page_view<\/code><\/td>\n<td>When a page is loaded or a browser history event happens (when enabled via enhanced measurement).<\/td>\n<td>Page load or history event (<code>pushState<\/code>, <code>replaceState<\/code>, <code>popstate<\/code>).<\/td>\n<\/tr>\n<tr>\n<td><code>scroll<\/code><\/td>\n<td>Scroll tracking (when enabled via enhanced measurement).<\/td>\n<td>Scroll to the bottom of the page.<\/td>\n<\/tr>\n<tr>\n<td><code>session_start<\/code><\/td>\n<td>An event starts a new session.<\/td>\n<td>30 minutes have expired since the last event sent by the current user.<\/td>\n<\/tr>\n<tr>\n<td><code>user_engagement<\/code><\/td>\n<td>The session is considered an <em>engaged<\/em> session.<\/td>\n<td>Active engagement with the website for more than 10 seconds, or a conversion event collected, or two or more pageviews collected.<\/td>\n<\/tr>\n<tr>\n<td><code>video_complete<\/code><\/td>\n<td>YouTube video was watched to completion (when enabled via enhanced measurement).<\/td>\n<td>Video ends.<\/td>\n<\/tr>\n<tr>\n<td><code>video_progress<\/code><\/td>\n<td>YouTube video is watched past specific progress milestones (when enabled via enhanced measurement).<\/td>\n<td>Video progresses past 10%, 25%, 50%, and 75%.<\/td>\n<\/tr>\n<tr>\n<td><code>video_start<\/code><\/td>\n<td>YouTube video watching begins (when enabled via enhanced measurement).<\/td>\n<td>Video starts.<\/td>\n<\/tr>\n<tr>\n<td><code>view_search_results<\/code><\/td>\n<td>A search results page is viewed (when enabled via enhanced measurement).<\/td>\n<td>A page is loaded with search query parameters in the URL.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>As you can see, many of the events listed have to do with enhanced measurement. However, there are some key events that are always collected, and interestingly they might not actually have their own hit types at all. Instead, they are <em>derived<\/em> from other events that are collected on the site.<\/p>\n<p>For example, let\u2019s say you collect a <code>page_view<\/code> event from a user who hasn\u2019t visited your site before, and this <code>page_view<\/code> is the first hit they send. This is what you\u2019ll see in the request:<\/p>\n<div style=\"aspect-ratio: 1794 \/ 194;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-params.jpg\" title=\"Event params\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"194\" width=\"1794\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-params.jpg#ZgotmplZ\" alt=\"Event params\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The <code>_fv<\/code> parameter denotes that this is a <strong>first visit<\/strong> event (the user is a new user), and the <code>_ss<\/code> parameter means that this event started a new session. When you look at the data in GA4, this one single <code>page_view<\/code> event actually splits into three separate GA4 events!<\/p>\n<div style=\"aspect-ratio: 958 \/ 260;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-split.jpg\" title=\"Event split\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"260\" width=\"958\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-split.jpg#ZgotmplZ\" alt=\"Event split\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>If you look at the request again, you\u2019ll see that the <code>seg<\/code> parameter has the value <code>0<\/code>. This means that the session is not considered engaged. When the user then sends another page view before the session timeout (30 minutes), this is what the parameter value becomes in the new page view event:<\/p>\n<div style=\"aspect-ratio: 840 \/ 220;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/engaged-session.jpg\" title=\"Engaged session\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"220\" width=\"840\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/engaged-session.jpg#ZgotmplZ\" alt=\"Engaged session\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>On the web, <code>user_engagement<\/code> is collected in milliseconds, with each event that classifies as an engagement event sending the current engaged time with the <code>_et<\/code> parameter. This parameter value isn\u2019t surfaced in GA4 events, but it is available in BigQuery:<\/p>\n<div style=\"aspect-ratio: 3390 \/ 700;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/engagement-time.jpg\" title=\"Engagement time\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"700\" width=\"3390\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/engagement-time.jpg#ZgotmplZ\" alt=\"Engagement time\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>For a platform that celebrates not being bound to an arbitrary concept of a <em>session<\/em>, it sure does seem like it hasn\u2019t shrugged off this arbitrariness entirely. Time will tell how these events will properly translate to the reports.<\/p>\n<p>Having said that, the idea that a session is just an annotation (the <code>_ss<\/code> parameter and the dedicated events) rather than a key aggregation (as in Universal Analytics) is inspiring. It\u2019s much easier to reconstruct your <em>own<\/em> concept of what a meaningful aggregation metric is.<\/p>\n<blockquote>\n<p>See <a href=\"https:\/\/stuifbergen.com\/2020\/11\/session-modeling-in-bigquery-sql-using-ga4-data-and-a-trip-to-paris\/\">this article<\/a> by Jules Stuifbergen for an example of how you can build your own session approach using BigQuery and the raw data export from GA4.<\/p>\n<\/blockquote>\n<h3 id=\"recommended-events\">Recommended events<\/h3>\n<p><strong>Recommended events<\/strong> are a curiosity, mainly because <em>at the time of writing<\/em> they have very little functional use in GA4.<\/p>\n<p>Google has a <a href=\"https:\/\/support.google.com\/analytics\/answer\/9267735?hl=en&amp;ref_topic=9756175\">bunch of support pages<\/a> focused on telling you what semantics to use when collecting events for specific segments and industries.<\/p>\n<p>For example, when the user logs in, Google instructs you to use an event with the name <code>login<\/code> and a parameter with the name <code>method<\/code>.<\/p>\n<div style=\"aspect-ratio: 1548 \/ 1190;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/login-event.jpg\" title=\"Login event\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1190\" width=\"1548\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/login-event.jpg#ZgotmplZ\" alt=\"Login event\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Why? Who knows. There\u2019s no benefit in the current events to collecting an event with the name <code>login<\/code> as opposed to, for example, <code>user_login<\/code>. However, it\u2019s a <em>recommended<\/em> event, so it has to carry some weight, right?<\/p>\n<p>Well, again, time will tell. I\u2019m assuming some of these events get collected into their own dedicated reports. Hopefully, some will even be exempt from current quotas, ecommerce events in particular.<\/p>\n<blockquote>\n<p>In fact, ecommerce events are an exception to the rant above &#8211; they <strong>do<\/strong> have functional weight as they populate the monetization reports. Take a look at my <a href=\"https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/\">guide for ecommerce implementation in GA4<\/a> for more information.<\/p>\n<\/blockquote>\n<p>For now, if you want to add a new data collection tag to the site, take a look at the list of recommended events and see if you find one that fits your use case. If you do, use that, and try to use the recommended parameters as well. There\u2019s no harm in doing so, and at best you\u2019ll enable some cool functionality that Google will release in the near future.<\/p>\n<p>However, if you don\u2019t find a recommended event that fits your use case perfectly, don\u2019t waste time trying to shoehorn a square piece into a round hole. Use <strong>custom events<\/strong> instead.<\/p>\n<h3 id=\"custom-events\">Custom events<\/h3>\n<p>Once you\u2019ve exhausted the list of automatically collected and recommended events, and you can\u2019t find one that fits your tracking need, you can always send <strong>whatever event name you wish<\/strong>. Just note that there are some <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/reference?client_type=gtag#reserved_event_names\">reserved names<\/a>.<\/p>\n<p>Custom events are super powerful, even if Google is <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/ga4\/events#custom_events\">oddly diminutive<\/a> about their use.<\/p>\n<div style=\"aspect-ratio: 1796 \/ 480;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/custom-events.jpg\" title=\"Custom events\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"480\" width=\"1796\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/custom-events.jpg#ZgotmplZ\" alt=\"Custom events\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>For some reason, Google <em>really<\/em> wants you to use anything but custom events. I don\u2019t really agree with this. Custom events are your chance to choose how GA4 will serve your organization. Even if the data isn\u2019t surfaced in most of the standard reports (odd argument because custom events are certainly available in all the key parts of the reporting UI), they will be available in BigQuery.<\/p>\n<p>No matter how long they\u2019ve been in the game, I don\u2019t think Google can or should prescribe how you are to do event tracking on any given website. Thus, take their recommended events with a grain of salt, especially since they have little functional impact today, and use custom events at your leisure.<\/p>\n<p>Familiarize yourself with BigQuery &#8211; it really is the key to making the most of GA4. I love the <a href=\"https:\/\/support.google.com\/analytics\/answer\/9327811?hl=en\">analysis hub<\/a>, and I\u2019m sure I\u2019ll use the <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/reporting\/data\/v1\">data API<\/a> religiously once it has a stable release, but nothing &#8211; <strong>nothing<\/strong> &#8211; will replace BigQuery as my analysis tool of choice.<\/p>\n<h2 id=\"event-parameters\">Event parameters<\/h2>\n<p>As mentioned above, events comprise an <strong>event name<\/strong> and <strong>parameters<\/strong>.<\/p>\n<p>Parameters are further split into <strong>special<\/strong> parameters (reserved names that contain technical details about the hit), <strong>custom<\/strong> parameters (text and number parameters), and <strong>user properties<\/strong>.<\/p>\n<h3 id=\"special-parameters\">Special parameters<\/h3>\n<p>These parameters are collected with every single event, regardless of if it\u2019s collected automatically or tagged manually:<\/p>\n<ul>\n<li><code>ul<\/code> or <code>language<\/code>, which collects the browser language (e.g. <code>en-us<\/code>).<\/li>\n<li><code>dl<\/code> or <code>page_location<\/code>, which collects the current URL.<\/li>\n<li><code>dr<\/code> or <code>page_referrer<\/code>, which collects the referrer URL (or empty string if not available).<\/li>\n<li><code>dt<\/code> or <code>page_title<\/code>, which collects the page title.<\/li>\n<li><code>sr<\/code> or <code>screen_resolution<\/code>, which collects the screen resolution.<\/li>\n<\/ul>\n<p>There are additional \u201cspecial\u201d parameters that are collected in some cases. These include (but are not limited to):<\/p>\n<ul>\n<li><code>cid<\/code> &#8211; Client ID; the cookie identifier that helps GA4 recognize repeat visits from the same device.<\/li>\n<li><code>uid<\/code> &#8211; User ID; an identifier you can set manually based on an authentication token, for example. This helps you unite cross-platform and cross-device browsing under a single login identifier.<\/li>\n<li><code>sid<\/code> &#8211; Session ID.<\/li>\n<li><code>sct<\/code> &#8211; Session count; how many sessions have been collected from the current user. NOTE! As this is collected with a client-side cookie that is not related to the Client ID cookie, it\u2019s possible this number doesn\u2019t actually reflect reality, and a BigQuery analysis might return different results, for example.<\/li>\n<li><code>seg<\/code> &#8211; Session engaged; if the current session is considered \u201cengaged\u201d.<\/li>\n<li><code>_fv<\/code> &#8211; First visit; if the current hit is the first hit collected from this user.<\/li>\n<li><code>_ss<\/code> &#8211; Session start; if the current hit started a new session.<\/li>\n<\/ul>\n<h3 id=\"custom-parameters\">Custom parameters<\/h3>\n<p>You can set <strong>custom parameters<\/strong> by adding them manually to your tags. <a href=\"#automatically-collected-events\">Automatically collected events<\/a> can collect some custom parameters automatically as well.<\/p>\n<p>Custom parameters come in two flavors:<\/p>\n<ul>\n<li><strong>Text<\/strong> parameters, when the value set to this parameter is not a number (<code>ep.<\/code> prefix in the hit).<\/li>\n<li><strong>Number<\/strong> parameters, when the value set to this parameter is a number (<code>epn.<\/code> prefix in the hit).<\/li>\n<\/ul>\n<p>The main difference is that text parameters can be used as custom dimensions and number parameters can be used as custom metrics.<\/p>\n<p>To set parameters, you add them into the event tag like this:<\/p>\n<div style=\"aspect-ratio: 1780 \/ 592;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-parameters.jpg\" title=\"Event parameters\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"592\" width=\"1780\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/event-parameters.jpg#ZgotmplZ\" alt=\"Event parameters\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Here I\u2019ve configured the two variables (<code>{{Readability - Get median grade}}<\/code> and <code>{{Readability - Get reading time}}<\/code>) to return numbers, so they get automatically converted to number parameters. The <code>user_level<\/code> is cast into a string by Google Tag Manager (as it\u2019s hard-coded into the tag field), and thus it\u2019s treated as a text parameter.<\/p>\n<div style=\"aspect-ratio: 1544 \/ 324;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/text-and-number-parameters.jpg\" title=\"Text and number parameters\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"324\" width=\"1544\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/text-and-number-parameters.jpg#ZgotmplZ\" alt=\"Text and number parameters\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The only caveat to setting event parameters in the tag is that <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/reference?client_type=gtag#reserved_parameter_names\">event parameter names cannot begin with <code>google_<\/code>, <code>ga_<\/code>, or <code>firebase_<\/code><\/a>.<\/p>\n<p>When you want to use event parameters for analysis, they need to be <a href=\"https:\/\/support.google.com\/analytics\/answer\/10075209?hl=en&amp;ref_topic=9756175\">registered<\/a> as custom dimensions and metrics first.<\/p>\n<p>If you have the <a href=\"#bigquery-export-and-ga4-events\">BigQuery export<\/a> enabled, <strong>all<\/strong> event parameters will be exported to BQ whether they\u2019re registered as custom dimensions \/ metrics or not.<\/p>\n<h3 id=\"user-properties\">User properties<\/h3>\n<p>User properties can be set with events as well. A user property acts similarly to Universal Analytics\u2019 user-scoped custom dimensions, with the main difference that they apply from the <strong>hit they were set<\/strong> onwards rather than the <em>session<\/em>* they were set as in Universal Analytics.<\/p>\n<p>User properties need to be <a href=\"https:\/\/support.google.com\/analytics\/answer\/9269570?hl=en&amp;ref_topic=9756175\"><em>registered<\/em> in the GA4 user interface<\/a> for them to be available in reports.<\/p>\n<p>To set a user property, simply add it to the tag in the correct place:<\/p>\n<div style=\"aspect-ratio: 1790 \/ 354;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/user-property-set.jpg\" title=\"User property set in the tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"354\" width=\"1790\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/user-property-set.jpg#ZgotmplZ\" alt=\"User property set in the tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>You\u2019ll see that it\u2019s included in the hit with the <code>up.<\/code> prefix.<\/p>\n<div style=\"aspect-ratio: 1688 \/ 296;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/user-type-internal.jpg\" title=\"User type internal\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"296\" width=\"1688\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/user-type-internal.jpg#ZgotmplZ\" alt=\"User type internal\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>There are some user property names that cannot be used as they are reserved. Check the list <a href=\"https:\/\/developers.google.com\/analytics\/devguides\/collection\/protocol\/ga4\/reference?client_type=gtag#reserved_parameter_names\">here<\/a>.<\/p>\n<h2 id=\"configuration-tag-and-events\">Configuration tag and events<\/h2>\n<p>When you create an event tag in Google Tag Manager, you have the option of choosing a <strong>configuration tag<\/strong> to set things up for the event hit.<\/p>\n<div style=\"aspect-ratio: 994 \/ 766;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/select-configuration-tag.jpg\" title=\"Select configuration tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"766\" width=\"994\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/select-configuration-tag.jpg#ZgotmplZ\" alt=\"Select configuration tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>The configuration tag is, surprise surprise, the same as the <a href=\"https:\/\/developers.google.com\/gtagjs\/reference\/api#config\"><code>config<\/code> command<\/a> with the global site tag (gtag.js).<\/p>\n<p>You can use it to establish a shared configuration for your event hits, and you can even use it to <strong>set persistent event parameters<\/strong>.<\/p>\n<p>The most common use case for the configuration tag is for <em>configuring<\/em> the GA4 implementation. You can add fields that configure how <a href=\"https:\/\/developers.google.com\/gtagjs\/devguide\/cookies\">cookies are set<\/a> or to <a href=\"https:\/\/developers.google.com\/tag-manager\/serverside\/send-data#google-analytics-4\">which endpoint to send the hits<\/a> (useful if you want to collect the data with <a href=\"https:\/\/www.simoahava.com\/analytics\/server-side-tagging-google-tag-manager\/\">a server container<\/a>).<\/p>\n<p>However, you can also set <strong>persistent<\/strong> events and user properties with the configuration tag as well. Any field names that you set that are <em>not<\/em> reserved (e.g. <code>cookie_domain<\/code>) will be treated as event parameters, and they will be included with <strong>every single event that uses this configuration tag<\/strong>.<\/p>\n<div style=\"aspect-ratio: 1816 \/ 1264;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/configuration-tag.jpg\" title=\"Configuration tag\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1264\" width=\"1816\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/configuration-tag.jpg#ZgotmplZ\" alt=\"Configuration tag\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Note that there\u2019s one potentially pretty devastating <strong>caveat<\/strong> with setting persistent event parameters and user properties with the configuration tag:<\/p>\n<p><strong>The values will be fixed to their initial values and will NOT be updated with every event<\/strong>.<\/p>\n<p>In other words, when you set an event parameter or property in the configuration tag, it will be sent with every single event that uses the configuration tag. However, the value will always be whatever it was when the configuration tag fired.<\/p>\n<p>It\u2019s thus <em>not<\/em> a useful way to set dynamic values like event timestamps or similar. Instead, it should be used to set parameters that are unlikely to change from one event to the next.<\/p>\n<h2 id=\"ecommerce-events\">Ecommerce events<\/h2>\n<p>Ecommerce events are, at the time of writing, part of a very special and unique cast: they are <a href=\"#recommended-events\">recommended events<\/a> that actually <em>do<\/em> something.<\/p>\n<p>The typical structure of an ecommerce event is a prescribed <strong>event name<\/strong> (e.g. <code>add_to_cart<\/code>) together with an <code>items<\/code> array that reflects the items or products that were involved in the action.<\/p>\n<p>If you want to start tagging your site for ecommerce data collection, I\u2019d like to direct you to my <a href=\"https:\/\/www.simoahava.com\/analytics\/google-analytics-4-ecommerce-guide-google-tag-manager\/\">comprehensive implementation guide for GA4 ecommerce<\/a>.<\/p>\n<p>One curiosity about ecommerce events is that the <code>items<\/code> structure is an actual <strong>array<\/strong>. Typically, event parameters are primitive values such as strings or numbers.<\/p>\n<p>The <code>items<\/code> array is a refreshing change and hopefully, <em>hopefully<\/em>, a sign that GA4 will start opening up the rigid data structure inherited from Universal Analytics, where the only multi-dimensional values you can collect are <a href=\"https:\/\/www.simoahava.com\/analytics\/enhanced-ecommerce-guide-for-google-tag-manager\/\">ecommerce objects<\/a>.<\/p>\n<div style=\"aspect-ratio: 2352 \/ 432;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/multidimensional-parameters.jpg\" title=\"Multi-dimensional event parameters\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"432\" width=\"2352\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/multidimensional-parameters.jpg#ZgotmplZ\" alt=\"Multi-dimensional event parameters\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>I mean, that syntax of turning the array of objects into this weird, proprietary string format doesn\u2019t make very much sense either, but at least you can send something other than just primitive values to GA4.<\/p>\n<p>I really hope they\u2019ll extend the data model to accept JSON values, for example. Being able to send an array or object as an event parameter and then having it be automatically parsed for the reporting UI (and nested for BigQuery) would be an absolutely <em>incredible<\/em> feature to have in GA4. Something that\u2019s been missing from Google\u2019s analytics tools since day one.<\/p>\n<h2 id=\"debugging-events\">Debugging events<\/h2>\n<p>For debugging the event implementation, there are three tools I use.<\/p>\n<ol>\n<li>\n<p>The new <a href=\"https:\/\/www.simoahava.com\/analytics\/new-preview-mode-google-tag-manager\/\">Tag Assistant preview mode<\/a> for making sure that the event fields are populated correctly.<\/p>\n<\/li>\n<li>\n<p>The web browser\u2019s <a href=\"https:\/\/developers.google.com\/web\/tools\/chrome-devtools\">developer tools<\/a> for making sure the hit payload contains all the correct values.<\/p>\n<\/li>\n<li>\n<p>GA4\u2019s <a href=\"https:\/\/support.google.com\/analytics\/answer\/7201382?hl=en\">DebugView<\/a> for making sure the data ends up in GA4 in the correct format.<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>If you\u2019re a fan of browser extensions, I recommend <a href=\"https:\/\/www.thyngster.com\/\">David Vallejo\u2019s<\/a> excellent <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/gtmga-debug\/ilnpmccnfdjdjjikgkefkcegefikecdc\">GTM\/GA Debug<\/a> which comes equipped with full GA4 debugging support!<\/p>\n<\/blockquote>\n<h3 id=\"tag-assistant-preview\">Tag Assistant Preview<\/h3>\n<p>When you\u2019re debugging your GA4 setup with Tag Assistant, you have <strong>two<\/strong> ways of validating your setup.<\/p>\n<p>First, you can debug the <strong>GTM container<\/strong> where you\u2019ve implemented the GA4 tags. Choose the trigger event (e.g. DOM Ready), and make sure all the fields in the event tag look right.<\/p>\n<div style=\"aspect-ratio: 3060 \/ 1350;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/tag-assistant-gtm-preview.jpg\" title=\"Tag assistant GTM preview\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1350\" width=\"3060\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/tag-assistant-gtm-preview.jpg#ZgotmplZ\" alt=\"Tag assistant GTM preview\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>You can also select the <strong>GA4 measurement ID<\/strong> to see if the hit actually dispatched.<\/p>\n<div style=\"aspect-ratio: 3688 \/ 1460;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/ga4-debugging.jpg\" title=\"GA4 debugging\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"1460\" width=\"3688\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/ga4-debugging.jpg#ZgotmplZ\" alt=\"GA4 debugging\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Note how the <code>page_view<\/code> event name is translated to <strong>Page View<\/strong> in the Tag Assistant view. Unfortunately, the debug experience for a GA4 tracker is still a bit unwieldy, and you just <em>have to know<\/em> what event names to look for. Luckily it\u2019s usually easy to click through the handful of available messages to find the one where your hit was sent.<\/p>\n<p>When debugging with Tag Assistant, your focus should be on verifying that all the fields and parameters resolve to their correct values. If something is off, you know it needs to be fixed in GTM.<\/p>\n<h3 id=\"developer-tools\">Developer tools<\/h3>\n<p>Even though the new GA4 measurement ID debug view shows you the hit was dispatched with certain values, I still like to do network request debugging using the browser\u2019s developer tools.<\/p>\n<p>In GA4, the request is sent to a <code>\/collect<\/code> endpoint just as with Universal Analytics. However, you\u2019ll be able to identify a GA4 payload by the <code>v=2<\/code> parameter as well as the GA4 measurement ID sent with the <code>tid<\/code> parameter.<\/p>\n<div style=\"aspect-ratio: 1254 \/ 466;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/ua-vs-ga4.jpg\" title=\"UA vs GA4 requests\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"466\" width=\"1254\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/ua-vs-ga4.jpg#ZgotmplZ\" alt=\"UA vs GA4 requests\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>Check the requests, make sure they return a <code>204<\/code> status code.<\/p>\n<blockquote>\n<p>GA4 requests return a <code>204<\/code> status because the content type for GA4 requests is <strong>text<\/strong>, but the response is always empty. It\u2019s still a successful request!<\/p>\n<\/blockquote>\n<p>Then go through the parameters and make sure all the values look good. This is what the actual request to GA4 will be, so if something is off at this point you\u2019ll know you need to fix it at its source (e.g. GTM).<\/p>\n<div style=\"aspect-ratio: 2380 \/ 330;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/network-tools.jpg\" title=\"Network tools\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"330\" width=\"2380\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/network-tools.jpg#ZgotmplZ\" alt=\"Network tools\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<h3 id=\"debugview\">DebugView<\/h3>\n<p>Finally, if you\u2019re previewing a Google Tag Manager container, the hit will be automatically sent to GA4\u2019s DebugView. If you want to manually enable DebugView for other hits (e.g. when not previewing a container), you can always set the <code>debug_mode<\/code> field to any value (though <code>true<\/code> probably makes most semantic sense).<\/p>\n<div style=\"aspect-ratio: 1804 \/ 574;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/debug-mode.jpg\" title=\"Debug mode\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"574\" width=\"1804\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/debug-mode.jpg#ZgotmplZ\" alt=\"Debug mode\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>When the request includes the <strong>debug mode<\/strong> parameter (<code>_dbg<\/code>), you\u2019ll find a real-time data stream of similar hits in the <strong>DebugView<\/strong> report in GA4.<\/p>\n<div style=\"aspect-ratio: 3002 \/ 2116;\" class=\"figure nocaption\">\n<p>    <a href=\"https:\/\/www.simoahava.com\/images\/2020\/11\/debugview.jpg\" title=\"DebugView\"><\/p>\n<p>    <img decoding=\"async\" class=\"fig-img\" height=\"2116\" width=\"3002\" loading=\"lazy\" src=\"https:\/\/www.simoahava.com\/images\/2020\/11\/debugview.jpg#ZgotmplZ\" alt=\"DebugView\"\/><\/p>\n<p>    <\/a><\/p>\n<\/div>\n<p>I can\u2019t emphasize enough how stupendously <em>amazing<\/em> this feature is. To be honest, it\u2019s my favorite part of GA4\u2019s reporting interface!<\/p>\n<p>A real-time stream of debug events, with all the parameters available for perusal, and you can even see how some <a href=\"#automatically-collected-events\">automatically collected events are generated<\/a> on the fly!<\/p>\n<p>So, as the last step of debugging your event implementation, make sure DebugView agrees with what you think the event should look like. If everything looks good, the next step is to locate the data in your standard reports (might take some time to reach those).<\/p>\n<p>If something looks off in DebugView, the issue might be at the source (something was wrong with GTM after all), or you could have messed something with GA4\u2019s data stream settings.<\/p>\n<p>Debugging is an acquired skill &#8211; it\u2019s not easy to do because you need to know what you\u2019re looking for before you can flag it as a potential issue. However, what matters is <strong>consistency<\/strong> and the discipline to approach debugging with an <strong>end-to-end process<\/strong> rather than just cherry-picking individual parts of the event implementation for analysis.<\/p>\n<p>It doesn\u2019t make sense to only look at your GTM setup if the issue can also be in your GA4 settings or vice versa.<\/p>\n<h2 id=\"summary\">Summary<\/h2>\n<p>I hope this guide has been useful! Setting up event tracking with GA4 can be difficult at first because there\u2019s a <em>lot<\/em> of baggage inherited from Universal Analytics.<\/p>\n<p>I want to share something that I\u2019ve mentioned numerous times in trainings and discussions when GA4 comes up:<\/p>\n<p><strong>I don\u2019t want GA4 to repeat Universal Analytics\u2019 mistakes!<\/strong><\/p>\n<p>So many people are holding off with trying GA4 out because they want it to have everything that Universal Analytics had first. What\u2019s the point? Universal Analytics\u2019 data model was far from perfect. Sessions, sampling, limited custom dimensions, views, filters, client IDs, just to name a few.<\/p>\n<p>I really hope that GA4 finds a way out of the shackles imposed upon it by virtue of being an analytics platform created by the same company that also created Google Analytics.<\/p>\n<p>GA4\u2019s data model is strictly event-driven, even if there are whiffs of sessions and users here and there. The hit-stream vibes are strong with this one, which might make it difficult to adjust after the awkward hierarchical event model of Universal Analytics.<\/p>\n<p>With this guide, my purpose has been to show how you can approach implementing event tracking with Google Analytics 4. Remember that GA4 is still in its infancy &#8211; there\u2019s likely to be lots and lots of feature releases between now and soon. You\u2019ll be disappointed by some and elated by others, but one thing\u2019s for certain: it\u2019s a brave new world for Google\u2019s analytics tools. If they don\u2019t come with guns blazing out of the gate, they risk losing foothold in a world where viable analytics platforms are a dime a dozen.<\/p>\n<p>I\u2019m excited at the prospects of all the things you can do with GA4\u2019s event stream model, but I\u2019m also a bit worried about how strong the pull of Universal Analytics will be.<\/p>\n<p>What do you think about GA4\u2019s event tracking capabilities? Or, if you wish, feel free to unload your thoughts on GA4 in general.<\/p>\n<\/p><\/div>\n\n","protected":false},"excerpt":{"rendered":"<p>On the surface, tracking events in Google Analytics 4 (GA4) is fairly simple. Events are, after all, pretty much the only thing you can collect in GA4. It\u2019s easy to get tied down with endless comparisons to Universal Analytics, though. While I\u2019m steadfastly opposed to the idea that GA4 should resemble Universal Analytics, it\u2019s still [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":77814,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12033],"tags":[12765,12573,1531,2059,17296],"dealstore":[],"offerexpiration":[],"class_list":["post-77813","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-analytics","tag-analytics","tag-events","tag-google","tag-guide","tag-implementation"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Implementation Guide For Events In Google Analytics 4 - Som2ny Network<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fivemor.com\/?p=77813\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Implementation Guide For Events In Google Analytics 4 - Som2ny Network\" \/>\n<meta property=\"og:description\" content=\"On the surface, tracking events in Google Analytics 4 (GA4) is fairly simple. Events are, after all, pretty much the only thing you can collect in GA4. It\u2019s easy to get tied down with endless comparisons to Universal Analytics, though. While I\u2019m steadfastly opposed to the idea that GA4 should resemble Universal Analytics, it\u2019s still [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fivemor.com\/?p=77813\" \/>\n<meta property=\"og:site_name\" content=\"Som2ny Network\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-09T12:06:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1022\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"25 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fivemor.com\/?p=77813#article\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\"},\"headline\":\"Implementation Guide For Events In Google Analytics 4\",\"datePublished\":\"2025-02-09T12:06:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813\"},\"wordCount\":4953,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg\",\"keywords\":[\"Analytics\",\"EVENTS\",\"Google\",\"Guide\",\"Implementation\"],\"articleSection\":[\"Analytics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fivemor.com\/?p=77813#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fivemor.com\/?p=77813\",\"url\":\"https:\/\/fivemor.com\/?p=77813\",\"name\":\"Implementation Guide For Events In Google Analytics 4 - Som2ny Network\",\"isPartOf\":{\"@id\":\"https:\/\/fivemor.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg\",\"datePublished\":\"2025-02-09T12:06:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fivemor.com\/?p=77813#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fivemor.com\/?p=77813\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/?p=77813#primaryimage\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg\",\"width\":1792,\"height\":1022},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fivemor.com\/?p=77813#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fivemor.com\/?bp_activities=1\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Implementation Guide For Events In Google Analytics 4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fivemor.com\/#website\",\"url\":\"https:\/\/fivemor.com\/\",\"name\":\"Som2ny Network\",\"description\":\"Daily Deals\",\"publisher\":{\"@id\":\"https:\/\/fivemor.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fivemor.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/fivemor.com\/#organization\",\"name\":\"Som2ny Network\",\"url\":\"https:\/\/fivemor.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"contentUrl\":\"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png\",\"width\":300,\"height\":86,\"caption\":\"Som2ny Network\"},\"image\":{\"@id\":\"https:\/\/fivemor.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fivemor.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/fivemor.com\"],\"url\":\"https:\/\/fivemor.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Implementation Guide For Events In Google Analytics 4 - Som2ny Network","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fivemor.com\/?p=77813","og_locale":"en_US","og_type":"article","og_title":"Implementation Guide For Events In Google Analytics 4 - Som2ny Network","og_description":"On the surface, tracking events in Google Analytics 4 (GA4) is fairly simple. Events are, after all, pretty much the only thing you can collect in GA4. It\u2019s easy to get tied down with endless comparisons to Universal Analytics, though. While I\u2019m steadfastly opposed to the idea that GA4 should resemble Universal Analytics, it\u2019s still [&hellip;]","og_url":"https:\/\/fivemor.com\/?p=77813","og_site_name":"Som2ny Network","article_published_time":"2025-02-09T12:06:49+00:00","og_image":[{"width":1792,"height":1022,"url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"25 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fivemor.com\/?p=77813#article","isPartOf":{"@id":"https:\/\/fivemor.com\/?p=77813"},"author":{"name":"admin","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371"},"headline":"Implementation Guide For Events In Google Analytics 4","datePublished":"2025-02-09T12:06:49+00:00","mainEntityOfPage":{"@id":"https:\/\/fivemor.com\/?p=77813"},"wordCount":4953,"commentCount":0,"publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"image":{"@id":"https:\/\/fivemor.com\/?p=77813#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg","keywords":["Analytics","EVENTS","Google","Guide","Implementation"],"articleSection":["Analytics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fivemor.com\/?p=77813#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fivemor.com\/?p=77813","url":"https:\/\/fivemor.com\/?p=77813","name":"Implementation Guide For Events In Google Analytics 4 - Som2ny Network","isPartOf":{"@id":"https:\/\/fivemor.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fivemor.com\/?p=77813#primaryimage"},"image":{"@id":"https:\/\/fivemor.com\/?p=77813#primaryimage"},"thumbnailUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg","datePublished":"2025-02-09T12:06:49+00:00","breadcrumb":{"@id":"https:\/\/fivemor.com\/?p=77813#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fivemor.com\/?p=77813"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/?p=77813#primaryimage","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2025\/02\/google-analytics-4-events-implementation-guide.jpg","width":1792,"height":1022},{"@type":"BreadcrumbList","@id":"https:\/\/fivemor.com\/?p=77813#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fivemor.com\/?bp_activities=1"},{"@type":"ListItem","position":2,"name":"Implementation Guide For Events In Google Analytics 4"}]},{"@type":"WebSite","@id":"https:\/\/fivemor.com\/#website","url":"https:\/\/fivemor.com\/","name":"Som2ny Network","description":"Daily Deals","publisher":{"@id":"https:\/\/fivemor.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fivemor.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/fivemor.com\/#organization","name":"Som2ny Network","url":"https:\/\/fivemor.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/","url":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","contentUrl":"https:\/\/fivemor.com\/wp-content\/uploads\/2026\/07\/4a0953c4-logo-300x86-1.png","width":300,"height":86,"caption":"Som2ny Network"},"image":{"@id":"https:\/\/fivemor.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/fivemor.com\/#\/schema\/person\/b85e3c3dc0e1daea076524dc8810c371","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fivemor.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/729ae85bf62b9917e93538db2f2688ca?s=96&r=g&default=https%3A%2F%2Ffivemor.com%2Fwp-content%2Fplugins%2Fbuddypress-first-letter-avatar%2Fimages%2Fdefault%2F96%2Flatin_a.png","caption":"admin"},"sameAs":["https:\/\/fivemor.com"],"url":"https:\/\/fivemor.com\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/77813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=77813"}],"version-history":[{"count":0,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/posts\/77813\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=\/wp\/v2\/media\/77814"}],"wp:attachment":[{"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=77813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=77813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=77813"},{"taxonomy":"dealstore","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fdealstore&post=77813"},{"taxonomy":"offerexpiration","embeddable":true,"href":"https:\/\/fivemor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fofferexpiration&post=77813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}