Third-Party Cookie Deprecation
Third-Party Cookie Deprecation
Third-party cookies have historically been used for cross-domain tracking of end-user activity. They collect analytics data that are then leveraged to provide a more personalized user experience. In recent years, however, major browsers have opted to phase out third-party cookies in order to improve their compliance with privacy regulations.
As of January 2021, Coveo implemented a way for clients to send a tracking ID (the client ID) through the Usage Analytics (UA) Write API, thereby removing the need for a third-party cookie to track user visits. The client ID is generated by Coveo’s library, coveo.analytics.js, and usually stored client-side in local storage and a first-party cookie.
|
Note
If the coveo.analytics.js library isn’t used, you can still send the client ID by adding it to the payload on the call to the Coveo UA Write API - Version 15. |
Clients deploying newer versions of Coveo search interfaces don’t rely on third-party cookies to track their end users; they rely on the client ID which uses a first-party cookie and local storage. Meanwhile, those who use the older version of the Coveo JavaScript Search Framework (JSUI) dating pre-January 2021 still use third-party cookies to track user activities between visits.
In order to respect compliance goals and browser evolution, Coveo will deprecate third-party cookies by June 2023. Clients who still rely on a JSUI version dating from before January 2021 will be required to upgrade to a newer version prior to the deprecation.
|
If you don’t upgrade your Coveo solution to a newer version, you will no longer be able to track user visits once the deprecation is completed. This will also impact Coveo Machine Learning (ML), the Visit Browser, and several other major features that rely on visits. |
Step 1: Verify the JSUI Version
Verify which JSUI version your Coveo implementation is currently using.
-
If you’re using the January 2021 JSUI version (or newer), then you won’t be affected by the eventual deprecation since your deployment uses the client ID when an event is sent. For more information on how Coveo UA uses the client ID, see What is the client ID?.
-
If you’re running on an older version, then you must perform Step 2: Upgrade Your Implementation before June 2023.
Step 2: Upgrade Your Implementation
If you’re using a JSUI version that predates the January 2021 version, you must upgrade your implementation. We recommend that you upgrade to the latest version available. At minimum, you must upgrade to the version that includes the January 2021 JSUI release.
For applicable Coveo integrations, the following table lists the January 2021 version upgrades:
Integration | Upgrade |
---|---|
Coveo for Salesforce |
Upgrade to 4.13 (or higher). |
Coveo for Sitecore |
Upgrade to 5.0.943.3 (or higher). |
Coveo for ServiceNow |
Upgrade to 21.2.51 (or higher). |
Coveo for Zendesk |
Upgrade all search pages to 2.10083 (or higher). |
|
Notes
|
Step 3: Test Your Upgrade
Once you’ve completed the upgrade, test your implementation to ensure that the upgrade is successful and that the cookie header has been set. You can do this by creating a custom dimension and a dashboard report in the Coveo Administration Console. This step is necessary for verifying if there are elements in your implementation that:
-
are still using the third-party cookie.
-
aren’t using the client ID.
|
Note
If you have a custom integration with custom events, you may notice that the client ID doesn’t pass. This may be resolved by adding the set cookie header parameter in Coveo UA, which lets you drill down on the custom events and retrieve the information that the client ID would have gotten had it passed. |
Add a Custom Dimension
-
On the Dimensions (platform-ca | platform-eu | platform-au) page, create a custom dimension.
-
Ensure that you give the dimension a meaningful display name (e.g.,
Third-Party Cookie
). -
For the API name, enter
c_third_party_cookie_set
. -
Under Related events, ensure that all three check boxes are selected.
-
Add a Custom Dashboard
-
On the Reports (platform-ca | platform-eu | platform-au) page, add a blank dashboard.
-
At the upper-right corner of the window, click
, and then select Paste JSON configuration.
-
In the Import a Report Configuration panel that appears, paste this JSON configuration, and then click Import and save.
-
Adjust the date range to specify the date your upgrade was completed. The dashboard should look similar to the following example:
-
The dashboard is comprised of three Table cards. Ideally, the All events card and the Events sending a Client ID card should be identical, with the same events and event counts, while the Events leveraging a third-party cookie card should be empty.
-
If the Events leveraging a third-party cookie isn’t empty (as shown in the previous example), it might indicate that the upgrade was incomplete and that there’s a search hub in your deployment that’s still leveraging a third-party cookie.
-
Reference
{
"displayName": "Third-party cookie deprecation check",
"type": "DASHBOARD",
"configuration": {
"description": "This report is to validate the third-party cookie deprecation and the transition to the client ID",
"dateRange": {
"range": "weeks",
"length": 1,
"offset": -1
},
"compareRange": {
"range": "weeks",
"length": 1,
"offset": -2
},
"tabs": [
{
"id": "9487",
"title": "Tab 1",
"sections": [
{
"title": "",
"position": {
"col": "1",
"row": "1",
"sizex": "6",
"sizey": "11",
"minSizex": 2
},
"cards": [
{
"id": "7006",
"href": "",
"title": "All events",
"sortBy": "DocumentView",
"filters": "",
"metrics": [
"DocumentView",
"CustomEvent",
"PerformSearch"
],
"cardType": "DetailedStatistics",
"position": {
"col": 1,
"row": 2,
"sizex": 4,
"sizey": 4,
"minSizex": 1,
"minSizey": 2
},
"ascending": false,
"showCount": false,
"dimensions": [
"customEventType",
"originLevel1"
],
"headerHref": "",
"showHeader": true,
"metricsSort": [
"PerformSearch",
"DocumentView",
"CustomEvent"
],
"metricFilters": "",
"dimensionsSort": [
"originLevel1",
"customEventType"
],
"metricsHeaders": {},
"bindOnLastSearch": true,
"dimensionsHeaders": {},
"editMode": false
},
{
"id": "34FF",
"href": "",
"title": "Events sending a Client ID",
"sortBy": "DocumentView",
"filters": "(clientid!~'null' AND clientid!~'' AND clientid!=null)",
"metrics": [
"DocumentView",
"CustomEvent",
"PerformSearch"
],
"cardType": "DetailedStatistics",
"position": {
"col": 1,
"row": 7,
"sizex": 2,
"sizey": 4,
"minSizex": 1,
"minSizey": 2
},
"ascending": false,
"showCount": false,
"dimensions": [
"customEventType",
"originLevel1"
],
"headerHref": "",
"showHeader": true,
"metricsSort": [
"PerformSearch",
"DocumentView",
"CustomEvent"
],
"metricFilters": "",
"dimensionsSort": [
"originLevel1",
"customEventType"
],
"metricsHeaders": {},
"bindOnLastSearch": true,
"dimensionsHeaders": {},
"editMode": false
},
{
"id": "BEA1",
"href": "",
"title": "Events leveraging a third-party cookie",
"sortBy": "PerformSearch",
"filters": "(c_third_party_cookie_set==true)",
"metrics": [
"DocumentView",
"CustomEvent",
"PerformSearch"
],
"cardType": "DetailedStatistics",
"position": {
"col": 3,
"row": 7,
"sizex": 2,
"sizey": 4,
"minSizex": 1,
"minSizey": 2
},
"ascending": false,
"showCount": false,
"dimensions": [
"customEventType",
"originLevel1"
],
"headerHref": "",
"showHeader": true,
"metricsSort": [
"PerformSearch",
"DocumentView",
"CustomEvent"
],
"metricFilters": "",
"dimensionsSort": [
"originLevel1",
"customEventType"
],
"metricsHeaders": {},
"bindOnLastSearch": true,
"dimensionsHeaders": {},
"editMode": false
},
{
"id": "2AB6",
"href": "",
"style": "info",
"title": "Events sending Client ID",
"value": "The table below needs to be identical to the \"All events\" table. If there are missing events, it means those events are not sending a Client ID, which is now required.\n",
"cardType": "NoteCard",
"position": {
"col": 1,
"row": 6,
"sizex": 2,
"sizey": 1,
"minSizex": 1,
"minSizey": 1
},
"eventType": "join",
"headerHref": "",
"isMarkdown": true,
"editMode": false
},
{
"id": "DBCE",
"href": "",
"style": "info",
"title": "Events leveraging third-party cookie",
"value": "The table below needs to be empty. If it's not empty, it means that a search hub is still leveraging a third-party cookie to set the Visitor ID.\n",
"cardType": "NoteCard",
"position": {
"col": 3,
"row": 6,
"sizex": 2,
"sizey": 1,
"minSizex": 1,
"minSizey": 1
},
"eventType": "join",
"headerHref": "",
"isMarkdown": true,
"editMode": false
},
{
"id": "A1D6",
"href": "",
"style": "info",
"title": "All events",
"value": "The event count in this table should always be the sum of the event counts from the two other tables in this dashboard.",
"cardType": "NoteCard",
"position": {
"col": 1,
"row": 1,
"sizex": 4,
"sizey": 1,
"minSizex": 1,
"minSizey": 1
},
"eventType": "join",
"headerHref": "",
"isMarkdown": true,
"editMode": false
}
],
"editMode": false
}
],
"active": true,
"editMode": false
}
],
"filters": "$",
"version": 6
},
"allAnalyticsViewer": true,
"filters": []
}