Final Report – Customer Experience Digital Data Layer v1.0 Ready!
Posted on:The v1.0 of Customer Experience Digital Data Layer is now ready in the form of a W3C Community Group Final Report. 14 months, 102 participants, 56+ organizations’ input has helped get the specification into its current form – it is not always easy to get major industry players on the same page on any subject – it is a testament to the collaborative spirit of the community, the pressing needs of the industry and the vision laid out by industry analysts and gurus such as fixithere – that helped in making this specification a reality.
The specification is a start – there will be much that will be learnt through implementation, and there are areas the specification did not get into in the interests of getting something collaborative, yet meaningful, out the door. It is thus a “commencement” of this journey.
Here is a link to the Final Report:
Well done! Would expect each eCommerce platform to now provide this as a standard plug-in.
Great Idea. Its a big pain to invent things all the time. And ti would be great to not spend time on this in future.
Great work π
I have summarized the 60 page document into a 2 page cheatsheet here:
http://bit.ly/digitalDataSheet
Please also add these variables to V2 spec. this is based on a summary of my comments here:
http://www.w3.org/community/custexpdata/2013/05/17/first-draft-of-customer-experience-digital-data-acquisition-published-by-customer-experience-digital-data-community-group/#comments
// NEW server attributes – The importance of these two new variables need to be made clearer in the spec:
“environment_Identifier”: “dev”, // dev, staging or live
“settings_ga_isDebugConsoleEnabled”: “true”, // Set document.cookie=”tag_debug=1″ on dev environment
// NEW server attributes
server_isDeviceFingerPrintTrackingEnable: false,
visitXPurpose: preview (Safari browser header converted into serverside JSON response)
// NEW global “tracker settings” section
settings_ga_id
settings_ga_id_secondTracker
settings_ga_forceSSL: false,
settings_ga_isGApremium: true, // enable GA premium specific features e.g. 21-200 customDimension/customMetrics
settings_ga_setDomainName: “clientdomain.com”, // INSERT Top-level domain here
settings_gtm_externalCrossDomainlinksToDecorate: “otherdomain1.com, mycart.com”,
settings_gtm_tagTypeBlacklist
// NEW Recommendation/Remarketing attributes
“ecomm_pagetype”: “”, // home|searchresults|category|product|basket|purchase|other (FIXED VALUES)
“ecomm_prodid”: “”, // e.g. 123
“ecomm_totalvalue”: [“”], // e.g 100.00 pounds
“ecomm_pname”: [“”], // optional β use arrays for multiple products on same page
“ecomm_pcat”: [“”], // optional β use arrays for multiple products on same page
“ecomm_rec_prodid”: [“”], // related productID e.g. shoe shine
// Transaction attributes – Add local currency variable for sale page, cart page and product pages
“transaction_currency”: “USD”, // Global currency rollup profile
“transaction_currency_secondTracker”: “GBP”, // Local currency profile
// page attributes
page_httpResponseCode: , // e.g 200 or 404 or 500
page_forumPosts: 25
page_lastModified: 20130522
page_createdDate: 20130502
conversion_Type
// page attributes for large websites:
“settings_ga_brandName”: “big brand”, // If using multiple brand in rollup use this field
“settings_ga_country”: “UK”, // Use 2character ISO Country list
“settings_ga_region”: “London”, // Only needed for large localised websites
// component attributes
socialAction
socialpagePath
socialTarget
// component js plugin – Standardise to load:
“load_jquery”: “1.10.1”, // Load jQuery version
“settings_ga_isInPageTrackingEnabled”: “false”, //Auto-social button tracking
“settings_ga_isExternalLinkTrackingEnabled”: “true”, // Exit links to other websites
“settings_ga_isDownloadLinkTrackingEnabled”: “true”, // PDF tracking
“settings_ga_isMailtoLinkTrackingEnabled”: “true”, //
“settings_ga_isHashUrlFragmentsTrackingEnabled”: “false”, // Append location.hash within page_virtual#url
“settings_ga_isScrollTrackingEnabled”: “false”, // Blog content pages customHTML script
“settings_ga_isYoutubeTrackingEnabled”: “false”, // Youtube API auto-tracking customHTML script
“settings_ga_isFacebookAndTwitterButtonTrackingEnabled”: “false”, //Auto-social button tracking
// CustomVariables with 3digit number for 0-200 customDimension or customMetrics with userScope=6months, sessionScope=30mins, pageScope=pageOnly
“user_segment_cd_001_userScope_isNewRegistration”: “”, // customDimension001
“user_segment_cd_002_userScope_isUserNewCustomer”: “”, // customDimension002
“user_segment_cd_003_userScope_isLoggedIn”: “”, // customDimension003
“user_segment_cd_004_userScope_class”: “”, // customDimension004
“user_segment_cd_005_userScope_userID”: “”, // customDimension005 β aka Universal auth.user.getId
“user_segment_cm_001_currencyScope_visitorLifetimeValue”: “” // CustomMetric value
// inline markup
#ID attributes on div elements
#CLASS attributes
#HTML5 data attributes
#Phone number markup:
+44 (0)1234 00000
——-From the DNT TPE spec…
serverSide_httpResponseToDntRequest =
1. obeyDNT
2. ignoresDNT
3. inProgressDNT
4. notSpecified
Here is a JSON example.
Note: I have separated analytics-TRACKING and behavioural-TARGETING as this was missing from the DNT Preference Expression Spec status-representation example:
http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#status-representation
{
“targeting”: “yes”, // IsOnlineBehaviouralTargeting for Publishers OR onsite remarketing for Advertisers enabled?
“tracking”: “yes”, // Is AudienceMeasurementTracking enabled
“qualifiers”: “afc”, // external “A”udit + “F”raud prevention + ad-frequency “C”apping
“controller”: “http://www.yourdomain.com/privacy.html”,
“same-party”: [{
“google-analytics.com”,
“stats.g.doubleclick.net”,
“api.youtube.com”
}],
“third-party”: [{
“googleadservices.com”
“ads.doubleclick.net”,
}],
“audit”: [{
“http://policy.cookiereports.com/caf4f823-en-gb.html” // e.g. w3.org/P3P/validator.html
}],
“policy”: “/privacy.html#cookies”,
“edit”: “http://www.yourdomain.com/user-dashboard/edit-your-data”
}
digitalData = {
“visitor”: {
“returningStatus”: “new”, // new or returning visitor: used to only trigger consent message for new visitors
“preferenceForDNT”: window.navigator.doNotTrack, // yes|no|”not specified”. MUST defaulted to “not specified”
“anonymizeIp”: false, // hash last 3 characters of IP address in GA. Defaulted to off/false.
“geoplugin_status”: geoplugin_status, // 403 error, 200 is look-up ok
“geoIPcountryCode”: geoplugin_countryCode, // geo-plugin JS variable
“geoIPcontinentCode”: geoplugin_continentCode // geo-plugin JS variable
},
{// Server-side USER values on login or registration
“user”: {
“profile”: {
“auth_isSignedIn”: true,
“auth_isNewRegistration”: true, // used to only trigger consent message on first registration
“server_isDeviceFingerPrintTrackingEnable”: false, // ADDED
“auth_userIDtoSessionIDoveride”: false,
“profileID”: 12345
}
}
}
}
Please add this as a REQUIRED transaction field:
transaction.subtotal_include_tax= true | false,
Ref: http://tools.qubitproducts.com/uv/developers/specification/#toc_18
Currently, I have to add this as an optional attribute via
transaction.attributes.subtotal_include_tax
This field is essential for correct revenue calculations.
Also consider where a setting is needed for “,” or “.” as decimal separator, because this is different in some pares of Europe.
http://en.wikipedia.org/wiki/Decimal_mark#Countries_using_Arabic_numerals_with_decimal_comma
Thanks
Phil.
Page 25.
Example of digitalData.user[n].profile[n].profileInfo is An extensible object for providing information about the user.
digitalData.transaction.profile.profileInfo = {
profileID: “humanbeing12345”,
userName: “me”
};
Shouldn’t it be
An extensible object for providing information about the user.
digitalData.user[n].profile.profileInfo = {
profileID: “humanbeing12345”,
userName: “me”
};
The same error applies to digitalData.user[n].profile[n].address Object Literal
Yes, it should be!
I also reported this but the document is in locked-down mode π
Also digitalData.user[n] should NOT be an array, as it is very unlikely that more than one user profile needs to be output at any one time.
Please use the W3C Final report as reference when defining your data layer, and use the cheat sheet to interpret data layers that have already been defined.
One incongruence that I found is that the cheat sheet lists pageInstanceID as a variable that only holds only the environment (e.g. dev, test, staging, prod) while the W3C Final report lists pageInstanceID as a unique page identifier that also includes the environment (e.g. βmy homepage – prodβ).
Great to see that an effort is made to create a standardized data layer. Hopefully it will continue to evolve and become widely adopted!
Yes, I would like to see a new value for environmentIdentifier with the 3 fixed values (dev, live, staging), BUT pageInstanceID which blends environmentIdentifier and PageName was used π
Hopefully this will be fixed on the next version.
Also see the Qubit spec, which the W3C spec was based on. It uses a separate variable for environmentIdentifier
http://docs.qubitproducts.com/uv/parameters/pageenvironment.html
http://docs.qubitproducts.com/uv/specification/
What tag management solutions on the market work with this data layer standards at the moment?
Nearly all of the TMS solutions work with some form of this data layer standard. This is especially true of the client-side TMS platforms.
Please add support for JSON-based Serialization for rendered dataLayer values such as inline phone numbers for call tracking and SERP snippets.
json-ld
http://googlewebmastercentral.blogspot.co.uk/2014/04/surfacing-your-businesss-contact-and.html
http://www.w3.org/TR/json-ld/#embedding-json-ld-in-html-documents
http://www.google.com/webmasters/markup-tester/corporatecontacts
Example:
{ “@context” : “http://schema.org”,
“@type” : “Organization”,
“url” : “http://www.your-company-site.com”,
“contactPoint” : [
{ “@type” : “ContactPoint”,
“telephone” : “+1-401-555-1212”,
“contactType” : “customer service”
} ] }
On page 22 under the transaction object, the last item is listed as “digitalData.cart.items[n].attributes”. I assume this is a typo and that it is meant to be “digitalData.transaction.items[n].attributes”?
I noticed this too. I’d imagine it’s a typo.