W3C W3C Member Submission

Customer Experience Digital Data Acquisition 1.0

W3C Member Submission 17 September 2012

This Version:
Latest Version:
Viswanath Srikanth, IBM Corporation
Michael Niemann, IBM Corporation
Hutch White, IBM Corporation
Eliot Towb, IBM Corporation


This specification describes a method for surfacing Customer Experience Digital Data on a Web/Digital resource as a set of JavaScript Objects, and also specifies the parameters for communicating this data to digital analytic and reporting servers.

Status of This Document

This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications can be found in the W3C technical reports index at http://www.w3.org/TR/.

This document is the Customer Experience Digital Data Acquisition 1.0 Submission.

By publishing this document, W3C acknowledges that the Submitting Members have made a formal Submission request to W3C for discussion. Publication of this document by W3C indicates no endorsement of its content by W3C, nor that W3C has, is, or will be allocating any resources to the issues addressed by it. This document is not the product of a chartered W3C group, but is published as potential input to the W3C Process. A W3C Team Comment has been published in conjunction with this Member Submission. Publication of acknowledged Member Submissions at the W3C site is one of the benefits of W3C Membership. Please consult the requirements associated with Member Submissions of section 3.3 of the W3C Patent Policy. Please consult the complete list of acknowledged W3C Member Submissions.

Table of Contents

1. Introduction

Collection and analysis of visitor behavioral and demographic data has become an integral part of web design and website success. This data is central to site performance analysis, dynamically tailoring site content to visitor activity and interest and retargeting visitors based on behaviors.

Increasingly, multiple vendors are involved in the data collection process on a given digital property, and each has a solution that needs to be implemented on the web page. As a result, page design has become more complex and development cycles lengthen as different requirements for data surfacing and formatting are added to the design process. Furthermore, changing or adding vendors typically requires that the client development team change the page design to accommodate vendor requirements. The common data items must be continually surfaced in different ways for different vendors and each design requirement is a custom effort, contributing to the lengthening development cycles. Clients are searching for a simpler, flexible and standard method to surface this common data on the web page and across their digital properties.

2. Terminology

Terminology is based on W3C's Architecture of the World Wide Web [WEBARCH] and Hyper-text Transfer Protocol [RFC2616] 

Digital Analytics
Digital Analytics is the collection and analysis of various metrics from multiple digital touchpoints to provide goal oriented, actionable understanding and response to user behaviors.
A program that establishes connections for the purpose of sending requests. [RFC2616]
An application program that accepts connections in order to service requests by sending back responses. Any given program may be capable of being both a client and a server; our use of these terms refers only to the role being performed by the program for a particular connection, rather than to the program's capabilities in general. Likewise, any server may act as an origin server, proxy, gateway, or tunnel, switching behavior based on the nature of each request.[RFC2616]

3. Rationale for this Standard

Customer Experience digital data items that are tracked and captured by different vendors are commonly understood elements used in digital analytics, but vendor specific format requirements and code assignments create design complexity and vendor dependency in site design.

As a simple instance, vendorA may capture some digital data for page details as a concatenation of ‘PageID + PAGENAME + PAGECATEGORY' while vendor B may capture the same through distinct variables vendorB.page.pageId, vendorB.page.pageName, vendorB.page.pageCategory. Further, the names of the variables, the data structure name & types and methods of extensibility all vary on a per-vendor basis. Frequently, custom code must be written to capture data to meet a given vendor's requirements.

Cumulatively, differences of this type between vendors permeate across all relevant customer experience digital data objects including Order, Shopping Cart, Registrant and more, increasing the complexity of customer experience digital data management at the site.

To this end, a Standard data object that represents the common data elements in a standard way will allow development teams to implement standard design structures that populate the Standard data object. Vendor code placed on the page would reference that standard structure, simplifying the process of on-boarding or changing vendors, and shaving off expensive development cycles.

The proposed Standard data object is a JavaScript object because of ubiquitous support for JavaScript in web browsers and web based applications, as well as in other forms of digital properties like mobile & kiosks and so forth.

The use of a JavaScript object means that the data is not embedded in the html markup and would not affect page registration or performance. Developers would only need to populate the data fields in the object that are applicable to the page, keeping the size and complexity of the object to a minimum. That coding would never change regardless of page requirements vis-a-vis vendor additions or deletions unless new data elements were required. Because the data is a standard object, vendors who recognize the object would provide code that references that object, requiring no modification of the page other than to drop the vendor code container onto the page.

This standard will thus yield a shorter development cycle using fewer resources and there will be a savings to the client in time and money. The addition or deletion of vendors will be independent of considerations of page redesign, allowing decisions to be made based on vendor efficacy rather than cost of migration.

4. Conformance

Conformance is defined in accordance with the use of the words MUST, MUST NOT, SHOULD, SHOULD NOT, MAY and RECOMMENDED as described in RFC 2119 [RFC2119] .

5. Customer Experience Digital Data Object

This section details the JavaScript Object structure to be used whenever the corresponding data value needs to be surfaced.

5.1 The Root JavaScript Object

This section is normative

The root JavaScript Object (JSO) MUST be digitaldata, and all data elements used in web analytics MUST derive off of this JavaScript Object either directly or indirectly.

5.2 Page Identifier Object

This section is normative

Page Identifier is among the most widely used web analytic data element, and is among the top level web analytic objects. A Page Identifier MUST have the following Object Name & Type.

Object NameTypeComment
digitaldata.PageIdentifier String Page Identifier indicating stage of production

5.3 Page Details Object

This section is normative

Page Details Object carries significant details about the page, and the most commonly used data elements are captured by the specification below. Page Details MUST have the following Object Name & Type.

Object NameTypeComment
digitaldata.page.pageid String Page ID
digitaldata.page.pagename String PageName
digitaldata.page.pagecategory String Page Category
digitaldata.page.searchterm String Internal Search Term
digitaldata.page.searchresult Integer Number of Internal Search Results
digitaldata.page.destinationurl String Destination URL
digitaldata.page.referringurl String Referring URL
digitaldata.page.breadcrumb[n] String Array(n) Bread Crumb – hierarchical identifier
digitaldata.page.attributes[n] String Array(n) Additional dimensions to page details

5.4 Product Object

This section is normative

Product Object carries details about a particular product with frequently used attributes listed below. Product Object MUST have the following Object Name & Type.

Object NameTypeComment
digitaldata.product.productid String Product Id
digitaldata.product.productname String Product Name
digitaldata.product.sku String Product Sku
digitaldata.product.categoryid String Product Category
digitaldata.product.attributes[n] String Array(n) Additional dimensions to a product

5.5 Cart Object

This section is normative

Cart Object carries details about items in cart. ‘Items' is an array under Cart Object. Cart Object MUST have the following Object Name & Type.

Object NameTypeComment
digitaldata.cart.items[n] Array Cart Line Items
digitaldata.cart.items[n].productid String Product ID
digitaldata.cart.items[n].productname String Product Name
digitaldata.cart.items[n].categoryid String Product Category
digitaldata.cart.items[n].quantity Integer Product Quantity
digitaldata.cart.items[n].baseprice Number Product Base Price
digitaldata.cart.items[n].attributes[n] String Array (n) Additional dimensions

5.6 Order Object

This section is normative

Order Object consists of Order Object and the Products and Address sub Objects. Order Object and the sub objects of Products and Address MUST have the following Name& Type.

Object NameTypeComment
digitaldata.order.orderid String Order Number
digitaldata.order.ordersubtotal Number Order Total
digitaldata.order.currencycode String Currency Conversion Code
digitaldata.order.registrationid String Customer ID
digitaldata.order.address.line1 String Customer Address Line 1
digitaldata.order.address.line2 String Customer Address Line 2
digitaldata.order.address.city String Customer City
digitaldata.order.address.state_province String Customer State/Province
digitaldata.order.address.postalcode String Customer Zip/Postal Code
digitaldata.order.address.country String Customer Country
digitaldata.order.shippingaddress.line1 String Customer Shipping Address Line 1
digitaldata.order.shippingaddress.line2 String Customer Shipping Address Line 2
digitaldata.order.shippingaddress.city String Customer Shipping City
digitaldata.order.shippingaddress.state_province String Customer Shipping State/Province
digitaldata.order.shippingaddress.postalcode String Customer Shipping Zip/Postal Code
digitaldata.order.shippingaddress.country String Customer Shipping Country
digitaldata.order.shippingcharges Number Shipping Charges
digitaldata.order.salestax Number Sales Tax
digitaldata.order.attributes[n] String Array (n) Additional dimensions to an Order
digitaldata.order.items[n] Array Order Line Items
digitaldata.order.items[n].productid String Order Line Item Product ID
digitaldata.order.items[n].productname String Order Line Item Product Name
digitaldata.order.items[n].categoryid String Order Line Item Product Category ID
digitaldata.order.items[n].quantity Integer Order Line Item Product Quantity
digitaldata.order.items[n].baseprice Number Order Line Item Product Base Price
digitaldata.order.items[n].attributes String Additional dimensions to an Item

5.7 Registrant Object

This section is normative

A registrant is a visitor who logs in or registers at the site, sharing additional information during the process. Analytic data details related to a Registrant MUST be captured in the following Object Name & Type.

Object NameTypeComment
digitaldata.registrant.Registrantid String Registrant ID
digitaldata.registrant.email String Email Address
digitaldata.registrant.address.line1 String Registrant Address Line 1
digitaldata.registrant.address.line2 String Registrant Address Line 2
digitaldata.registrant.address.city String Registrant City
digitaldata.registrant.address.state_province String Registrant State/Province
digitaldata.registrant.address.postalcode String Registrant Zip/Postal Code
digitaldata.registrant.address.country String Registrant Country
digitaldata.registrant.attributes[n] String Array (n) Additional dimensions

5.8 Elements Object

This section is normative

Element identifies specific objects on a Page such as flash movies, videos, portlets and similar content. Typically used for tracking dynamic elements of page content. The Analytic data object MUST have the following Object Name & Type to surface this information.

Object NameTypeComment
digitaldata._elements._element[n].elementid String Element ID
digitaldata._elements._element[n].elementcategory String Element Category
digitaldata._elements._element[n].attributes String Additional dimensions

5.9 Events Object

This section is normative

This object populates event tags on a page and is used to track an event that has a start and stop - for example, an application, a submission or an event that should be tracked separately from content. This object tracks non-mercantile transactions; mercantile transactions are tracked usd the differential between the cart and order object. Event objects MUST follow the name & type indicated below.

Object NameTypeComment
digitaldata._events._event[n].eventid String Event ID
digitaldata._ events._event [n].eventcategory String Event Category
digitaldata._ events._event [n].eventaction Integer Event Action
digitaldata._ events._event [n].eventpoints Integer Event Points
digitaldata._ events._event [n].attributes String Additional dimensions

5.10 Extending the Customer Experience Digital Data Surfacing Objects

This section is normative

Extensions or custom analytic data locations may sometimes be needed to collect unique, vendor or client-specific data that is not part of the standard.

It is RECOMMENDED that all extensions or custom digital data locations be derived from the root digitaldata object, with a custom.companyid added at the level of the hierarchy where the extension or custom field is being added.

For instance, to add some custom digital data fields, the object would look like:

Object NameComment
digitaldata.page.custom.ibm.extrafields Extending Page Details Object
digitaldata.custom.ibm._generaltags_generaltag[n].linenumber Extending Root Object
digitaldata.custom.ibm._ generaltags_generaltag [n].attributes[n1] Extending Root Object

The fields after custom.companyid are completely unique to the vendor/client requirements.

5.11 Usage Sample for Customer Experience Digital Data Object

This section is informative

Product Detail Page

To surface data for a typical product detail page using the JavaScript object we would instantiate the standard page related 
digital data values as well as data for the individual product displayed:

  digitaldata = 
  { page:
         searchterm:'', searchresults:''},
product: {productid:'productid', productname:'productname', categoryid:'categoryid'} }

Shopping Cart

This example creates the data object for a typical web cart. Analytics page information is created as well as entries for each of the products carted.

    {items: new Array()},

  var counter=0;

  for (counter=0; counter<=1;counter++ )
  {digitaldata.cart.items[counter] =
    {productid:'productid'+counter, productname:'productname'+counter, quantity:'1',
     baseprice:'99.99', categoryid:'categoryid'}

Order Page

  A typical order thank you page is very similar to a cart page but will typically collect information about the customer. In this example, page information,
    order information, customer information and individual information on purchased items are collected.

   { order:
           {items: new Array()},
     page:{pageid:'ORDER CONFIRMATION',

  var counter=0;
  for (counter=0;counter<=1;counter++ )
  {digitaldata.order.items[counter] =

6. Customer Experience Digital Data Communication Specification

This section is normative

This section details the parameter list used for communicating Customer Experience Digital Data to the analytic servers. Data is typically communicated as parameters on an Http GET request, and so the parameter list would show up as:


In the table below, the first column carries the standard names of the parameters; these names are terse to accommodate length limitations on HTTP requests, though newer browsers are supporting longer lengths. The second column identifies the parameter, and the third column ties it back to the JavaScript object which surfaced the data. Between the surfacing of the data and its actual communication through the Http request, additional processing may be done on a per-vendor basis.

The parameter names MUST be defined as shown below for carrying the identified data.

Page Identifier

Parameter NameCommentReference JavaScript Object
pid Page Identifier digitaldata.PageIdentifier

Page Details

Parameter NameCommentReference JavaScript Object
pi Page ID digitaldata.page.pageid
pn Page Name digitaldata.page.pagename
cg Page Category digitaldata.page.pagecategory
se Internal Search Term digitaldata.page.searchterm
sr Number of Internal Search Results digitaldata.page.searchresult
ul Destination URL digitaldata.page.destinationurl
rf Referring URL digitaldata.page.referringurl
bc_h1..bc_hn Bread Crumb – hierarchical identifier digitaldata.page.breadcrumb
pv_a1..pv_an Additional dimensions to page details digitaldata.page.attributes[n]


Parameter NameCommentReference JavaScript Object
pr Product Id digitaldata.product.productid
pm Product Name digitaldata.product.productname
sk Product Sku digitaldata.product.sku
pcg Product Category digitaldata.product.categoryid
pr_a1..pr_an Additional dimensions to a product digitaldata.product.attributes[n]


Parameter NameCommentReference JavaScript Object
-- Cart Line Items. Each item must be
sent as a separate HTTP Request
pr Product ID digitaldata.cart.items[n].productid
pm Product Name digitaldata.cart.items[n].productname
pcg Product Category digitaldata.cart.items[n].categoryid
qt Product Quantity digitaldata.cart.items[n].quantity
bp Product Base Price digitaldata.cart.items[n].baseprice
sx_a1..sx_an Additional Item Dimensions digitaldata.cart.items[n].attributes[n]


Parameter NameCommentReference JavaScript Object
on Order Number digitaldata.order.orderid
tr Order Total digitaldata.order.ordersubtotal
cc Currency Conversion Code digitaldata.order.currencycode
cd Customer ID digitaldata.order.registrationid
ca1 Customer Address Line 1 digitaldata.order.address.line1
ca2 Customer Address Line 2 digitaldata.order.address.line2
ct Customer City digitaldata.order.address.city
st Customer State/Province digitaldata.order.address.state_province
zp Customer Zip/Postal Code digitaldata.order.address.postalcode
cy Customer Country digitaldata.order.address.country
sa1 Customer Shipping Address Line 1 digitaldata.order.shippingaddress.line1
sa2 Customer Shipping Address Line 2 digitaldata.order.shippingaddress.line2
sct Customer Shipping City digitaldata.order.shippingaddress.city
sst Customer Shipping State/Province digitaldata.order.shippingaddress.state_province
szp Customer Shipping Zip/Postal Code digitaldata.order.shippingaddress.postalcode
scy Customer Shipping Country digitaldata.order.shippingaddress.country
sg Shipping Charges digitaldata.order.shippingcharges
st Sales Tax digitaldata.order.salestax
or_a1..or_an Additional dimensions to an Order digitaldata.order.attributes[n]
-- Order Line Item. Each item should be
sent as a separate HTTP request
pr Order Line Item Product ID digitaldata.order.items[n].productid
pm Order Line Item Product Name digitaldata.order.items[n].productname
pcg Order Line Item Product Category ID digitaldata.order.items[n].categoryid
qt Order Line Item Product Quantity digitaldata.order.items[n].quantity
pr Order Line Item Product Base Price digitaldata.order.items[n].baseprice
sx_a1..sx_an Additional dimensions to an Item digitaldata.order.items[n].attributes


Parameter NameCommentReference JavaScript Object
cd Registrant ID digitaldata.registrant.Registrantid
em Email Address digitaldata.registrant.email
ca1 Registrant Address Line 1 digitaldata.registrant.address.line1
ca2 Registrant Address Line 2 digitaldata.registrant.address.line2
ct Registrant City digitaldata.registrant.address.city
st Registrant State/Province digitaldata.registrant.address.state_province
zp Registrant Zip/Postal Code digitaldata.registrant.address.postalcode
cy Registrant Country digitaldata.registrant.address.country
rg1..rgn Additional dimensions digitaldata.registrant.attributes[n]


Parameter NameCommentReference JavaScript Object
eid Element ID digitaldata._elements._element[n].elementid
ecat Element Category digitaldata._elements._element[n].elementcategory
e_a1..e_an Additional dimensions digitaldata._elements._element[n].attributes


Parameter NameCommentReference JavaScript Object
cid Event ID digitaldata._events._event[n].eventid
ccid Event Category digitaldata._events._event [n].eventcategory
cat Event Action digitaldata._events._event [n].eventaction
cpt Event Points digitaldata._events._event [n].eventpoints
c_a1..c_an Additional dimensions digitaldata._events._event [n].attributes

7. Data Privacy Considerations

This section is informative

A standard specification for customer experience data acquisition, as the one laid out in this document, serves to simplify the space, and by offering a method to precisely define and reference the data being collected, holds the promise of addressing some of the data privacy concerns related to commercial use of consumer data. We intend to encourage participants in the W3C standardization effort to consider how the specification laid out in this submission can be evolved to help address privacy concerns, including, but not limited to, accommodating privacy categorizations that may emerge from W3C's "Do Not Track" efforts. Such extensions could help deliver standardized solutions, contributing to simplified and meaningful consumer choice and greater transparency regarding use of consumer data.

8. References

8.1 Normative References

RFC 2119: Key words for use in RFCs to Indicate Requirement Levels , Scott Bradner, 1997. (See http://www.ietf.org/rfc/rfc2119.txt)
The application/json Media Type for JavaScript Object Notation (JSON) , D. Crockford, July 2006.

8.2 Informative References

W3C "Do Not Track" Tracking Protection Workgroup
W3C Tracking Protection WorkGroup, workgroup chartered to improve user privacy and user control by defining mechanisms to express user control

9. Acknowledgements

Additional Contributors:

Peter Cousins (IBM)