Overview

Overview.. 1

Purpose.. 2

Getting Started.. 4

Simulation.. 7

Modification.. 9

Rules.. 10

AT Internet Naming Policy.. 11

Mapped Paths.. 13

Node(s) Selector.. 15

Value Indicator.. 16

XTag Selector.. 17

Commands.. 18

Configuration.. 19

Platforms.. 28

Analysis.. 32

Container.. 37

Data Collectors.. 40

Production.. 41

Perimeters.. 42

PreProd.. 44

Site Variables.. 45

Page Variables.. 46

Clicks & Events.. 47

Components.. 52

Visitor.. 53

Search.. 54

Sales.. 55

Videos.. 63

Specific.. 64

Includes.. 66

Third-Party.. 67

Level 2 Dictionary.. 68

Versions.. 69

Test Cases.. 70

GA Mirroring.. 72

Purpose.. 73

Google Analytics Preparation.. 76

AT Internet Preparation.. 86

Collected Data.. 87

Settings.. 103

User Options.. 104

Shared Assets.. 106

Customizations.. 108

Customization JS.. 109

Mirroring JS.. 111

Server Setup.. 112

Amazon AWS.. 113

Changelog.. 114

What’s new?.. 115

What’s next?.. 116

Purpose

Principles

XTag Configurator belongs to the suite XTagManager, a Tag Management System dedicated to Web Analytics (AT Internet and Google Analytics).

It allows managing Web Analytics Configuration, that can be defined as a Web Analytics Tags Container dedicated to one Web Application.

Simple Website: one Configuration | Website made of multiple applications, with common parts (header, footer, menu...)

Whatever the Configuration(s) design and cascaded inclusions, only one JS is loaded (including ATI SmartTag), with just what the application needs, hence optimal performances.

XTagManager doesn’t provide any server infrastructure, but fully automate publications on your own server or on Amazon cloud servers -that can be setup in a few minutes-, taking care of CDN flush (CloudFront and/or Akamai so far).

For offline consultation, this guide can be downloaded as XTagConfigurator.pdf or as XTagConfigurator.chm (compiled help).

Specificities

As it is basically Web Analytics oriented, XTag Configurator doesn’t work as other generalist TMS do, bringing significant advantages:

It is a Desktop application (Office based), sharing Configuration assets in the Cloud (Amazon S3, Git). Configuration setup is made locally, hence ultra-fast testing cycles (<15s).

It never needs any Data Layer, even for eCommerce, hence no development effort required on application side.

It automatically synchronizes AT Internet and Google Analytics, when required (configure once, tag twice), including campaigns in both ways (ATI <> GA).

It automatically switches on PreProd storages, depending on customable rules (by default based on declared hostname patterns).

It easily tracks dynamic contents (popups, Ajax, Angular, React, Vue...) without development effort on application side, thanks to its customable triggering engine and smart APIs.

It automatically tracks YouTube videos (play, pause, progress), even when dynamically loaded, even without the presence of enablejsapi=1.

It automatically classifies external/internal visits without boring IP lists, by detecting when they come from internal network or not, even behind a proxy changing its public IP.

Its CTAs configuration is not made with tags based on bubbled events, nor by listening Data Layer events, but with an ordered list of Definitions dynamically injected at node level.

· Once a node addressed by a Definition, it ignores the others (from specific cases to general ones),

· With its built-in contextual variables, unique naming can be ensured with only one Definition, for instant basic Configurations,

· Definitions can be factorized thanks to merge capabilities at each level, avoiding copy/paste of common parts, hence an easier maintenance,

· It automatically classifies inbound, outbound and download links, based on customable rules.

It allows retrieving CTAs and Values Selectors without CSS knowledge, thanks to XTag Selector.

Eye

It allows checking CTAs name and type in-page, without clicking, thanks to XTag AT Internet Spy or XTag Google Analytics Spy.

Statistics

It allows displaying CTAs results Charts in-page, thanks to XTag AT Internet Charts.

Label

It allows performing instant CTAs non-regression checking, thanks to XTag AT Internet CTAs List or XTag Google Analytics CTAs List.

Its JavaScript API allows customizing all default behaviors, so that you’re never blocked by any technology (except AMP), nor any tracking requirement.

It allows embedding any other TMS for marketing tags: Google Tag Manager and Tag Commander as built-in settings with automated preprod switching, and others (Tealium, Ensighten, Adobe,... ) thanks to its “Third-Party” container. Doing so, it allows designing different containers schemes and release cycles for Web Analytics and Marketing activities.

It manages GDPR opt-out (ATI privacy mode and GA blocking) whatever the system providing user cookie acceptance (Tag Commander Trust provided as ready-to-use example).

Snippet Icon

Its snippet can be synchronous, asynchronous or deferred, synchronous mode allowing header third-parties like Optimizely.

XTagManager allows implementing Web Analytics very much faster than any other TMS, for a richer and more accurate tracking, with no dependencies on development team, so with a run mode fully agile.

Getting Started

Prerequisites

Mandatory

· Windows 2008 and further.

· Office 2010 and further.

· For Publication: Amazon S3 bucket, or public server with FTP access. See Server Setup for preparation.

· Recommended: Chrome extensions XTag AT Internet, XTag Google Analytics, XTag Selector.

Optional

· For Configurations history saving & sharing (team work): Git installation.

· For Simulation and Tests: Chrome extensions Requestly or Resource override.

Install XTag Configurator

1. Close all your Excel workbooks,

2. Run Setup_XTC.exe, click on Next ,

3. You are prompted to enter the root location, C:\XTagConfigurator by default.
Provided path is created when doesn’t exist, and automatically declared as trusted location in Office.

4. Click on Next until installation’s end.

5. Double click on the XTag Configurator icon created on your desktop, the splash screen appears:

6. Start working with XTag Configurator:

Basic Settings

Sharing

Mandatory for team work, optional otherwise: you need to populate Sharing Path/URL and Git settings in Common User Options.

Sites List

Optional: if already populated and shared, the Sites List of your organization will be available. Otherwise, it can be initiated by importing a CSV file.

But you can also do it one by one, as and when your Configurations are created.

Configurations List

Optional: if already populated and shared, the Configuration List of your organization will be available, and the first time you will open one, a Git Clone will be automatically done.

Otherwise, the list will appear empty and you’ll have no other choice than creating a New one.

Publication settings

Mandatory for Publication, optional for local testing: see Publisher Options.

Configuration Template

Optional but recommended: customize the template used to create each Configuration, see Configuration Template.

My First Configuration

Creation

Create your first operational configuration in a couple of minutes:

1. Run XTag Configurator.

2. Create a Configuration: see New for instructions.

3. Click on OK

4. The new Configuration is created and open:

Completion

1. Adjust/complete the Host Name Pattern with the domain of your Website:

2. If they were not present in your template, click on Platforms ribbon to define ATI Site IDs and possibly GA Properties.
If ATI Site ID appears as “Undeclared Site ID”, declare it by clicking on Sites List, then on New.

3. That’s it! You can already check this basic Configuration by clicking on Update Preview.
It is ready to be published and installation tips can be forwarded to your technical team.
In the meantime, you can start testing without waiting thanks to the Simulation mode, so that it can be completed before installation with further steps:

4. If you need to setup ATI Level 2 and possibly Google Analytics Content Groups, activate Perimeters Scope,

5. Click on Analysis ribbon to activate and define the data categories you want to collect, and possibly define Production and Perimeters Scope Maps to address your Website structure:

6. If you want completing your Configuration with a GTM or a Tag Commander Container, click on Container ribbon and define them:

Simulation

Preparation

1. In the Generate section of Configuration ribbon, activate the Simulation mode.
A dialog appears, let it empty (click on OK or Cancel ).

2. In the Preview Section, click on Preview Server (if not already highlighted by a previous test).

3. Click on Update Preview. A confirmation is displayed:

4. Click on Copy Preview URL

Requestly for Simulation

1. In Chrome browser, click on Requestly extension [image].

2. Click on + New Rule

3. Click on Insert Scripts

4. Enter a name, and set the filter on Host Equals, then type website hostname (usually the same than Host Name Pattern, when exact match),
Click on + Add Custom Script , change Insert on: option to Before Page Load
Paste what you get in the clipboard from last Preparation step (click on Copy Preview URL) in source URL (relative or absolute)
You should obtain something like that :

5. Click on Save : your Simulation is ready!

Verification

1. Run XTag AT Internet and open a tab to display your website (or reload it Ctrl + F5 )

2. You should record a Page tag in XTag AT Internet. If no, wait a few seconds and reload your page (Requestly sometimes requires a delay just after rule creation).

3. Navigate to another page: you should see a new Page tag.

If no, maybe your Web Application is a Single Page Apps, or maybe it is refreshed by Ajax calls without Page Load.
If you see #/ or #!/ in landing URL, it is a SPA, knowing there are cases where such indices are not present.
You can type simultaneously Ctrl + U to see the page source: if there’s no HTML content but only JS inclusions, it’s a SPA (but Ajax refresh cannot be identified this way).
If you have identified such technology or if you have a doubt: activate On Changed in Analysis ribbon, click on Update Preview and reload your site page.
>> Try a new navigation: now Page tags must be sent each time you navigate.

Activating On Changed on non-SPA is not an issue, but it is not optimal, and can make some configuration stuffs more complex than required. Moreover, that modifies installation tips then it’s preferable to be sure: it’s better asking your technical team.

Publication

Prerequisites

Once your Configuration validated by Simulation, you can Publish it. See Publisher Options.

Publish & Commit

Ensure Minify is checked, with PreProd and Simulation unchecked (if not, you’ll be warned), then see instructions for Publish Live.

Installation

Once your new Configuration published, you can ask your technical team to install its snippet. See Installation Tips.
In the meantime, you can continue working on it.

Completion & Test

1. Make your change

2. Click on Update Preview

3. Reload Page

4. Look at Page tag in Page tag in XTag AT Internet, and use XTag AT Internet Spy to check your CTA names and types without clicking.

This cycle being very fast, you can setup and test your tags one by one, and make a summary test in the end.

Modification

Preparation

Before modifying your Configuration, it’s preferable activating the PreProd mode: doing so, all your tests won’t pollute production results.

If you intend to add/modify Customization JS, you can also uncheck Minify: your code will be easier to debug.

Requestly for Modification

1. Open the Configuration you want to modify.

2. In Chrome browser, click on Requestly extension [image].

3. Click on + New Rule

4. Click on Redirect Request

5. Enter a name,

6. Switch on XTag Configurator, click on Copy Live URL, then paste in Url Contains

7. Switch on XTag Configurator, click on Copy Preview URL, then paste in Destination Url
You should obtain something like that :

8. Click on Save : you’re ready to work on it!

Modify & Test

1. Make your change

2. Click on Update Preview

3. Reload Page

4. Look at Page tag in Page tag in XTag AT Internet, and use XTag AT Internet Spy to check your CTA names and types without clicking.


Rules

AT Internet Naming Policy

Purpose

XTagManager computes automatically all tag names sent to AT Internet (Page tag or Click & Event tag), based on some rules described below.

When this default behaviour doesn’t meet naming requirement, some controls & completions can be managed at configuration level (see Page name for page tags or Click name for click tags).

When such Configuration flexibility is not enough, specific handling can be done in Customization JS .

Page tags

Default rule

By default, Page tag name is automatically generated from URL, by using the following pattern:

[protocol]://[host]/[removed path]/[account path]/[level 2 path]/[chapters path]/[page][.extension]
[protocol]://[host] | Protocol is not used for naming, but secured protocol (https) is used to setup the proper ATI Server. Host is not used for naming, but can be considered to set the proper ATI account.
[removed path] | Leading path ignored for naming. See Path Shortener .
[account path] | Folders identifying ATI Site ID (when one site is tracked with multiple accounts). See Production .
[Level 2 path] | Folders identifying website subdivision (Level 2). See Perimeters .
[chapters path]/[page] | Remaining folders and page name. All slashes (‘/’), except leading and trailing ones, are replaced by chapter division (‘::’) up to three chapters (others will be replaced by underscore and then embedded in page name).
.extension | Always ignored.

Standard sample

http://www2.schneider-electric.com/sites/corporate/en/customers/satisfy-our-customers/strategic-accounts.page
http://www2.schneider-electric.com | Protocol and host, not used in this case to set the account.
/sites/corporate | Leading path, configured to be removed (/sites + next folder).
/en | Mapped to ATI account and server (225304, http://logi10 ), then removed.
/customers | Mapped to Level 2 (5), then removed.
.page | Extension, always ignored.

The Remainder: /satisfy-our-customers/strategic accounts is converted in chapter and page name: satisfy‑our‑customers::strategic accounts

Possibly forbidden characters are automatically escaped to be accepted by AT Internet.

These rules can be overridden by configuration, see Page name.

Special cases
Landing pages

As explained above, when folders are mapped to account or Level 2, they are discarded from naming.

But when, once done, there’s no remaining folders to compute the page name, it could lead to generate an empty name.

An empty name is replaced by page’s URL in ATI’s results, like Google Analytics does: in most cases, this is not what is required.

Empty name can occur with two kinds of URL:

Website landing page | Example: www.mydomain.com
Level 2 landing page | Example: www.mydomain.com\Product\Range when \Product\Range is mapped to a Level 2.

XTagManager prevents empty name as following:

Website landing page | Define default page name - Example: Home
Level 2 landing page | No page name pattern specified: use last Level 2 folder as name – From example above: Range Page name pattern specified: use it.

Unclassified pages

When some parts of the website have been forgotten in Level 2 configuration, it could lead to raise tags with a Level 2 set to 0: they are called “unclassified pages”.

There are two strategies to manage them, depending on your requirements:

Unclassified allowed | This is the default behavior: all unclassified will be automatically raised with an empty name (whatever the name computed by rules described above) This empty name will be replaced by page’s URL in AT Internet results.
Unclassified forbidden | End Perimeters configuration with a * mapped to a default Level 2 Example: 102 (Miscellaneous)

In other words, it means “when a Level 2 is expected, not having one is an issue: I record the URL to identify them. If I want to give them a name anyway, I use a dedicated Level 2”.

Clicks tags

Tag name

Default click tag name depends on click type:

Type | Rule | Example
Exit | Target URL, without protocol & parameters | http://www.linkedin.com/groups?about=&gid=56843
Download | [CurrentPageName]::[FileName] | · Current page name: seg::industry::food-beverage · Link URL: /solutions/ww/en/med/pdf/1014-green-corporation.pdf Click tag name: seg::industry::food-beverage::1014- green-corporation.pdf
Navigation & Action | [CurrentPageName]::[TargetLeaf] | · Current page name: Home · Link URL: /sites/corporate/en/support/contact/customer-contact.page Click tag name: Home::customer-contact.page

Possibly forbidden characters are automatically escaped to be accepted by AT Internet.

These rules can be overridden by configuration, see Click name.

Click type control

There are some rules checked before accepting a click tag requirement. When they are not respected, such requirement is ignored.

These rules can be overridden in customization file.

Type | Rule | Example
Exit | Target host name != host name pattern | www.facebook.com/SchneiderElectric != www.schneider-electric.com
Download | No control, except defined filters , but by default it must be a link.
Navigation | Target host name = host name pattern | www.schneider-electric.us/en/insights/= www.schneider-electric.us
Action | No control, can be any type of node. | mailto:your.contact@schneider-electric.com

Mapped Paths

Purpose

Most of configuration steps begin with identifying concerned pages, thanks to a given path. You’ll find below the meaning of each considered path.

Path definitions

Original

Basically, a “path” is understood as the part of URL without protocol, host name and parameters.

XTagManager calls it the Original path.

Example:

http://www.schneider-electric.fr/sites/france/fr/support/faq/faq_main.page?page=content&country=FR&lang=frid=FA19854

Initial

We have seen in Page Tag rules that some simplifications are done on Original path, by Configuration or by design.

XTagManager calls the result the Initial path.

Example:

From Original path : /site is removed by Path Shortener , /france is removed by Ignore Next Folder , and .page extension ignored by design:

/sites/france/fr/support/faq/faq_main.page

Customized

For Production mapping, Initial path can be customized.

XTagManager calls the result the Customized path.

Example:

From Initial path , country parameter FR, is used to constitute a locale in the language folder, intended for Production mapping:

/fr-FR/support/faq/faq_main

Final

If Customized path is convenient for Production mapping, it’s not necessarily the same for subsequent uses (Perimeters, Search, Sales, Clicks…).

XTagManager calls the result the Final Path, or internally the Statistics Path.

You can decide how those mappings will be achieved by setting Final Path to Initial, Customized, or the Remainder (meaning previous result minus mapped path).

Example:

Option | Final path
Initial | /fr/support/faq/faq_main
Customized | /fr-FR/support/faq/faq_main
Remainder | /support/faq/faq_main

Note that, in all cases, Customization JS can also decide to modify this path for Perimeters Scope Map: it means that the expected Path mapped in Perimeters is the same than for all Analysis.

If you want to see the Final Path used by Perimeters and Analysis, just type stat_condition._spath in the console:

Final path can also be modified by Perimeters Customization JS.

In standard cases (only one account, no folder removed, no customization): Initial=Customized=Remainder=Original[if no extension]

Usage definitions

Root

A Path Root is the beginning of the considered Path (whole path is also matched), understood as complete folders.

· Path Root is used by Scope Maps: with Customized Path for Production mapping, and with Final Path for Perimeters mapping.

· When ended by dot, given Path is not used as Root, but compared as exact match.

· * alone is understood as « all possible paths », and can be used by those mappings, but only once, in last position.

· * at the end of path is useless, but it is ignored when present.

Examples:

Path root | Matches | Doesn’t match
/ww-EN | /ww-EN/support/faq/faq_main | /ww-FR/support/faq/faq_main
/ww | /ww/support/faq/faq_main | /ww-EN/support/faq/faq_main
/ww* | Same as above
/ww. | /ww/ or /ww | /ww/en
* | All path |

Pattern

A Path Pattern is a list of Paths separated by pipes |.

Each path can contain wildcards *. Otherwise, it is an exact match.

· Path Pattern is used by all Analysis maps: Custom Dimensions, Clicks & Events and Trackers.

· Starting by */ considers all possible folder(s) before the pattern.

· Ending by /* considers all possible folder(s) and page name after the pattern.

· Ending by * in a folder consider the value on the left as an expected root.

· * alone is understood as « all possible paths ».

Examples:

Path Pattern | Matches | Doesn’t match
*/faq/faq_main | /ww-EN/support/faq/faq_main | /ww-EN/support/faq
*/faq/* | /ww-EN/support/faq/faq_main /ww-FR/support/faq | /ww-EN/support/faq_main
/support/faq/* | /support/faq/faq_main /support/faq | /ww-EN/support/faq
*/product*/* | /en/product/12358 /fr/product-range/AN2546 | /allproducts
*/all-products|*/product-listing | /en/allproduct /fr/product-listing | /product-listing/index

Node(s) Selector

Definition

Node Selector is an advanced system allowing to locate a set of elements in current page. It can be setup manually, or thanks to XTag Selector .

· It returns an array of nodes that can be the considered ones, or their ascendant(s): it means that final selection depends on expected node type. When not specified, expected node type is A (link).

· It is used as Nodes Collection in SELECTOR columns, but also as unique node to fill Value Indicator in VALUE or data columns or between < > in page or click names.

Syntax

Node selector allows the usage of standard css or jquery selectors, but propose also a simplification of XPath, with the following differences:

· dot class separator (.) is replaced by double dot (:),

· [@id = 'myID'] is replaced by @myID or simply myID,

· Only determinant nodes are retained in the path: if a level is not useful, it is omitted: this is the essential point, leading to short paths resistant to structure changes.

· It doesn’t provide any attribute-based filtering syntax, because this is something addressed by FILTERS columns.

It selects nodes with the following pattern:

AscendantNode Selector/SubAscendant Selector/.../leafSelector

Where a Selector can be:

Selector

Select

id or @id

Node using this ID, returned in a list with unique element.

Note: @ is mandatory only when there’s a double dot (:) in this ID, it’s useless otherwise.

nodeType:className.*[index]

Node(s) with this type and class beneath current ascendant (whatever their level).

· If nodeType is omitted, only direct children are considered for class matching. Otherwise, all descendants with given node type are considered.
So if you want to select all children nodes of a given class whatever their type and position, use css selector instead (css:.class).

· . (dot) indicates that just this class is required match will be done for class name:
class1. : matches “class1 class2” or “class1”

· * indicates that a partial match will be done for class name :
class1* : matches “class1 class2” or “class12” or “Myclass1”, etc…
Note: ... (ellipsis) does the same, but it’s a deprecated syntax.

· [index] is optional: if missing, only first node (index = 0) is considered for an AscendantSelector, while all are returned for the leafSelector.
Negative values are accepted, and considered as counting from the end of list.

Examples:

DIV:row

Select DIV nodes with exact class row.

DIV:row.

Select DIV nodes with row in class names list

DIV:row*

Select DIV nodes containing row in one of their class names

DIV:row[1]

Select second DIV nodes with exact class row.

UL:[-1]

Select last UL node beneath current ascendant, whatever its class.

LI:

Select all LI nodes beneath current ascendant, whatever their class.

:row*

Select nodes containing row in one of their class names, but only if they are direct child of current ascendant.

..Selector

Look for matching node in current node ancestors.

Example:

..DIV:row

Look for an ancestor DIV with exact class name row.

javascript:code

jsnodes:code

Node(s) returned by javascript code.

· code can be a function call, a variable name... everything that returns an array of nodes.

· code is executed with exception management, so if it contains an error, nothing is broken.

jquery:jquery_selector

$:jquery_selector

Node(s) returned by a jquery selector

· This syntax doesn’t consider the current ascendant, if any. So it can only be used as first ascendant, or alone.

· JQuery library must be loaded by the page. If not, this syntax returns an empty array.

· When $ is the first character of a Definition, enter a quote before (Excel constraint).

css:css_selector

Node(s) returned by a css selector

Examples:

css:[title~=’flower’]

Selects all nodes with a title attribute containing the word ‘flower’.

css:a[href*=’.pdf’]

Selects all link containing ‘.pdf’ in their target URL

Value Indicator

Definition

A value indicator is a set of syntaxes intended to retrieve or calculate one value, expected as text or numeric (depending on targeted field).

It is used by Visitor , Search and Sales , but also to complete names ( page name , click name ).

Remarks about numeric values:

· Any numeric value equal to or less than 999,999,999.99 will be considered as being valid.
Any value above this figure will be considered as 0.

· If an expected numeric value is retrieved as text, it doesn’t matter if it contains currency (£, $, €,...), local separator (like comma instead of dot) or any comment (“VAT”, “Tax free”, ...): XTagManager cleans unexpected characters, detects local separators and convert in real number.

Node Selector

When the expected value is present in page, the value indicator can be a node selector locating its place.

· In all cases, when the selector returns more than one node, only the first is considered.

· A selected node is considered for all text it contains, including children. In other words, what you have visually selected is retrieved, minus leading and trailing spaces, html comments, and line feeds. Numeric values are cleaned as described above.

When it is retrieved with XTag Selector , use “For value extraction” in contextual menu.

When it is used in a name (in Perimeters Pages Names or Clicks & Events Name), a Node Selector must be surrounded by < >

JavaScript call

Text or Numeric Source

Value retrieved

js:code or jstext:code

Text returned by a JavaScript code, interpreted as string or number, depending on targeted value.

It can be an expression, a function (in customization file), or any global variable declared in page.

Example: js:myFunction()

jsnum:code

Same as before but expected value must be only a valid number. If not, zero is returned. To be used for calculation.

Example: jsnum:(function(){return (totalPrice*0.2);})() >> Inline function to compute VAT

selector/jsfunc:myFunction

Returns myFunction(selected node).
From provided selector, selected node is used as parameter to call myFunction. Must not use double quotes in expression.

Example: /jsfunc:(function(n){return ((n.className&&n.className.indexOf('active')>=0)?'expand':'collapse');}) >> Inline function to compute current node name

When it is used in a name (in Perimeters Pages Names or Clicks & Events Name), a JavaScript call must be surrounded by < >. In all other cases, it’s optional.

Other Text or Numercic Sources

Text Source | Value retrieved
#parameter | URL parameter’s value, or empty string when missing. Example: #_requestid >> retrieve value of _requestid parameter in page’s URL.
!cookie | cookie’s value, or empty string when missing. Example: !JSESSIONID >> retrieve value of JSESSIONID cookie for current domain.
\"constant \’constant | constant string. Example: \"none >> Set none as value in all cases.
999 | Any numeric value.

XTag Selector

Methodology

XTag Selector allows retrieving Node(s) Selectors and Value Indicators based on them without HTML nor CSS knowledge.

It uses a complex algorithm to select only significant path and class names, in order to provide an identification that will be change resistant.

This extension can be found in Chrome store .

Instructions

1. Once installed, simply click the toolbar icon [image] to activate

2. Then, with the green selector, hover any element you want to select in current page.

3. If you don’t succeed to select the required area, select a smaller one inside, then click on Select Parent until you obtain the proper selection.

4. Don’t worry if you don’t directly select the A node of a link (like the IMG below): XTag Selector examines if it has a A ascendant.

5. Once required area selected, right click on highlighted element, then choose the node selector type:

Menu | Select
For Links(s) tracking | All contained links (<a>); elements. Useful for click tracking on link elements. If there is no link in your selection, you'll be warned. Note: Some href filter can be also retrieved separated by tab, to automatically populate FILTER column.
For Action tracking | The exact place where the action is done. Useful for any clickable place which is not a link. Note: the node type is also retrieved separated by tabs, to automatically populate NODE TYPE column.
For Value extraction | Text inside the selection, for Value Indicator . If there’s no text in the selection, you’ll be warned.
For Area selection | The corresponding area, whatever it contains. Can be used for Videos areas, Search results when they are not links, or general usage.

>> Corresponding selector is copied in the clipboard, but also displayed on screen for information (until a new selection is made).

6. Paste the selector:

· Links, Action, Area: in a SELECTOR column. For Links and Actions, FILTERS and NODE TYPE can be completed as well by clipboard content.

· Value: in a VALUE column (Sites Variables, Page Variables, Visitor) or in any column expecting data (Search Keyword/Page Num, Sales) but also between < > inside page or click names.

7. To deactivate, click again on toolbar icon [image] or on XTag Selector... at upper left corner, or type on Esc key, or switch on another tab.


Commands

Configuration

Manage

New

Create a new Configuration

Unique ID

Enter an identifier (three letters are usually sufficient). Click on ! to check it is unused, otherwise that will be checked when you will click on OK

Type

Regular: Standard case, to address a Web Application

Master: To gather common tracking, then included in Regular Configurations

Name

Give your Configuration a descriptive name. It will be used as Title, in Configuration List, JS headers and Installation Tips.

Local Folder

Automatically populated with Unique ID as folder, but you can change it.

Filters

Enter a list of Filters separated by commas. They will be used in Configurations Filters.

Repository

If you have entered your Git settings, a repository is proposed for creation, you can adjust it. Otherwise, it remains empty.

Open

Open the Configuration Manager to select the Configuration(s) on which you want to work, or to Publish them by batch.

Search area

Type letters belonging to the description of the Configuration you are searching: the list is immediately filtered on those containing what you’ve typed.

Click on X to clear this area.

Filters

All the filters declared are gathered here. You can select more than one.

Clear

Clear Filters selection (Display all Configurations).

Select All

Select All the Configurations currently displayed.

Scan

Complete Configurations List by scanning local folder and subfolders.

It is useful when some Configurations have been copied manually, or after a Configurator update coming from a version <12.00

Browse

Browse any folder to add existing Configuration in the List, or to open some which are excluded from the list, like the Configuration templates.

Update

Complete List with Shared Configurations.

The process will download shared list and add the Configurations it contains in your local list when they didn’t exist.

Share

Add Selected Configuration(s) to the Shared List.

The process will download shared list, add into it those you have selected if they were not already present, then upload the completed list.

Publish

Publish Selected Configuration(s), after confirmation:

If, among the selection, there were Configurations in error state, or not in a state allowed to be published, you’re warned in the end of the process.

Open

Open Selected Configuration(s).

Close

Close this Dialog without action.

Save

Save current Configuration.

Title

Type the title you want to use for this configuration. It is used in generated Configuration File Header and Installation Tips.

Commit

Commit this Configuration in its repository.

Versions

List of all Commits and Publications, with Date and Author. See Versions.

Web Application

Notes

Open Web Application Notes about this Configuration: URLs, Credentials, Tickets (optional).

Test Cases

Open Web Application Test Cases used to validate this Configuration (optional).

Host Name Pattern

Define Production Host Name, used to automatically switch on PreProd Platform(s) when Page's Host Name doesn't match.

This must be defined to allow PreProd definitions (single PreProd or PreProd map).

Considered as a Pattern when ended or started by a dot (understood as “Starts with” or “Ends with”), otherwise it's an exact match.

You can declare several Production Host Name Patterns, separated by | (no other operators allowed).

Installation Tips

Generate a PDF with all necessary instructions for Configuration implementation in the Web Application for which it is made.

Common

Single Page Apps

If you have selected On Changed for SPA, footer modification is not required:

Asynchronous Snippet

In some rare cases, Asynchronous Snippet can optimize page load time, however leading to some third-party limitations.

To do so, keywords defer or async can be added to the original header inclusion in order to make the configuration file loaded asynchronously:

 <script type="text/javascript" src="//tagmanager.schneider-electric.com/mfc/configuration-stat.js" async></script>

If any (non SPA), footer snippet must be adapted as following:

 <script type="text/javascript">if(window.pageStatInjection)pageStatInjection();</script>

As per to w3c:

· If async is present: The script is executed asynchronously with the rest of the page (the script will be executed while the page continues the parsing).

· If async is not present and defer is present: The script is executed when the page has finished parsing.

· If neither async nor defer is present: The script is fetched and executed immediately, before the browser continues parsing the page.

However, if that will satisfy performance diagnostic tools, most of the time that will have no effect on page rendering time: XTagManager JavaScript is light and doesn’t make synchronous treatments.

But it can be tried and measured: in the case shown below, the browser parallelizes synchronous loads in page, so while there are others, async won’t decrease page rendering delay:

defer alone doesn’t make the DOM Ready happening earlier, and it is not recommended for the following reasons:

· Some browsers will create a specific group of parallelization for deferred scripts (by keeping their original order), so if they are few it can result in page load time increase.

· pageStatInjection() can happen to soon (before the script is loaded), so the content tag will be postponed to DOM Ready. This can have some impact on traffic volume.

· It can lead to different behavior with old browsers (ignored by IE9), making statistics comparison with recent versions irrelevant.

In case of asynchronous snippet, synchronous calls added in Third-Party container will no longer be executed synchronously

Generate

User Options
Purpose

Define Options that will be used by all your Configurations: your name, Libraries Path, Publisher credentials.

See User Options.

Version

Version of configuration to be generated, as five digits using the following policy:

· Three first digits:
Automatically updated from used library.

· Fourth digit:
Can optionally indicates the last digit of customization file version. It is automatically reset to zero when previous digits are changed from library.

· Fifth digit:
Configuration version for the four previous digits: it is automatically incremented when necessary at publication time.

Template

Edit the JavaScript Template used to generate the configuration (advanced developers only).

Customization JS

Open the Customization JS file (with the default JS editor setup on your machine) to override default behaviors (for developers only).

This file is generated the first time this command is used, based on the current Analysis selected, so it is recommended to select all those needed before the first call, otherwise some entry points would be missing and would have to be added manually when needed.

It is recommended as well to validate the need of On Changed activation before the first call, in order to add the proper code, otherwise it would also have to be added manually.

Minify

Minify all JavaScript files used by this Configuration and use the compressed version of all Libraries.

Check it to Publish Live, let it unchecked for debugging purposes.

If your try to Publish Live a version not minified, you'll be warned to confirm.

PreProd

Force PreProduction Site/Property to avoid polluting Production one with Live Tests.

A Configuration generated with this option cannot be Published Live.

To get this option enabled, you must have defined the Web Application Host Pattern.

Simulation

Generate a Configuration that can be injected in the Web Application when it has not been installed yet, thanks to JS file included in all application pages, and a Chrome extension (Requestly or Resource Override, + CSP when needed).

A Configuration generated with this option cannot be Published Live.

Copy Simulation’s door URL

Copy in clipboard the original Simulation's door URL (without protocol).

While Configuration is not installed, this can be pasted in [Replace] field of Requestly Rule (or [From] field in Resource Override, preceded by protocol or *://).

Preview

Preview Server

Start/Stop Preview Server (localhost) for testing purpose.

Update Preview

Update Preview Configuration for testing purpose. Note that it doesn't save it, so that you can make different tests without modifying the original one.

Open Preview URL

Open Generated Configuration: in default browser if Preview Server is started, or in default JS editor otherwise.

Copy Preview URL

Copy in clipboard the Configuration Preview URL (localhost).

This can be pasted in [With] field of Requestly Rule (or [To] field in Resource Override, preceded by protocol or *://).

Errors logs

See all Errors logged during last Update or Publication process.

Publish

Publish Live

Save the Configuration and Publish it Live.

The Publisher declines if PreProd or Simulation are activated, and asks for confirmation is Minify is unchecked.

1. You’re asked to enter a description of the version you’re about to publish (it cannot be empty). It will be reported in Versions history, and will be used as Git Commit label:

2. Click on Publish

The publication steps are automatically chained, depending on your Publisher settings. Hereafter a publication on S3, with Cloudfront automated flush and Akamaï fast purge:

Once Publication done, if there’s a Git Repository linked to this Configuration, a Commit is immediately triggered and the version tagged:

Open Preview URL

Open Live URL in default browser.

Copy Live URL

Copy the Configuration Live URL. Once Configuration installed, this can be pasted in [Replace] field of Requestly Rule (or [From] field in Resource Override, preceded by protocol or *://).

Help

Online Guide

Open this guide.

Platforms

Scope

Production

Allows defining Default ATI Production, Default GA Production, or Production Scope Map.

Most of time activated, except when Production storage is already defined elsewhere, for example by the SmartTag library, the CMS, or a Master Configuration.

PreProd

Allows defining Default ATI PreProduction, Default GA PreProduction, or PreProd mapping.

It is recommended to always define PreProduction, in order to avoid Production results polluted by staging tests.

To activate this, you must have defined the Web Application Host Name Pattern. Note that in case of SmartTag library defined for this Configuration, PreProd switching is prevented: to take benefit of it, you must use the built-in SmartTag composer.

Perimeters

Allows defining Default Level 2 or Perimeters:

· As Level 2 for AT Internet,

· As Content Group [Section] for Google Analytics Mirroring (customable default).

Sites List

Open and manage your AT Internet Sites / Google Analytics Properties Dictionary.

All, Production, PreProd

Filter on the type you need.

Search area

Type letters belonging to the Site name you are searching: the list is immediately filtered on those containing what you’ve typed.

Copy ATI

Copy in the clipboard the numeric ATI Site ID of the selected line. As the dialog is non modal, you can immediately paste this value where you want without closing it.

Copy GA

Copy in the clipboard the GA property of the selected line, if any. As the dialog is non modal, you can immediately paste this value where you want without closing it.

New

Open the Site creation Dialog:

Type

Classify this new Site as Production or PreProd. Than will help filtering the list when it contains a lot of Sites.

Site Name

Report the name as it has been declared in AT Internet.

ATI Side ID

Enter the numeric ATI Site ID.

GA Property

Enter the GA Property corresponding the ATI Site ID.

ATI log Server

Enter the http subdomain of the server collecting data for the ATI Site ID you’ve specified.

You don’t need to enter the full hostname (neither .xiti.com nor .ati-host.net) are required, they will be deducted.

In case of Custom Domain Data Collection, enter the full hostname.

SSL

Enter the https subdomain of the server collecting data for the ATI Site ID you’ve specified.

You don’t need to enter the full hostname: neither .xiti.com nor .ati-host.net are required, they will be deducted.

In case of Custom Domain Data Collection, enter the full hostname.

Export

Import

Update

Share

Close

AT Internet

Default ATI Production

Set Default Production AT Internet Site ID, when the Configuration addresses only one.

If several are needed, let it empty and manage Production mapping.

Default ATI PreProduction

Set Default PreProduction AT Internet Site ID.

If several are needed, let it empty and manage PreProd mapping.

Levels 2 Dictionary

Declare the Levels 2 numbers that can be used in Perimeters (those defined in AT Internet for considered Site IDs), and their corresponding names which could feed Google Analytics Content Group [Section] when Mirroring activated.

SmartTag

Use AT Internet SmartTag Library (recommended).

When unchecked, xtcore version will be used.

Default Page Name

Page Name used for Website root (no Path in URL). It can also be controlled in Perimeters.

Default Level 2

Set Default Level 2, when only one is required. If several are required (common case), let it empty and manager Perimeters.

Google Analytics

Universal

Use Universal Analytics snippet (recommended).

Advertising

Use Display Advertising snippet (DoubleClick). Not mandatory, and must be avoided in China.

Mirroring

Use Dual tracking engine, mirroring all AT Internet trackers as Google Analytics ones.

If not activated, only the traffic will be captured in GA.

This option can lead to exceed the hits limit of free version (10M/month).
Default GA Production

Set Default Production Google Analytics Property (UA-xxxxxxx-xx).

Default GA PreProduction

Set Default PreProduction Google Analytics Property (UA-xxxxxxx-xx).

You can let it empty if it's the same than Production (not recommended).

Mirroring JS

Create and/or Edit GA Mirroring Customization File.

Preview

Update Preview

See Update Preview.

Open Preview URL

See Open Preview URL.

Save

See Save.

Errors Log

See Errors Log.

Analysis

Path

Path Shortener

URL leading path to be ignored for Mapping and Names.

By default, Path folders are used as Chapters names, so this setting allows ignoring recurrent ones that don't bring any useful information.

This removal (as the one below) has an impact on Initial, then on content tag name and all subsequent mappings, except Third-Party which uses Original path.

Example: /sites

Ignore Next Folder

When leading Path above is present, then ignored, do the same for the next folder, whatever it could be.

This option is rarely used, however (originally designed for TeamSite CMS), it can be useful when the folder present after the one defined above is also useless but variable.

Example: when /sites is found as first folder in URL, remove the folder found just after, which contains country.

Final Path

Final Path Pattern to be used by Perimeters map and other Analysis.

Initial | URL Path minus Path Shortener and ignored folder(s).
Customized | Initial Path Customized for Production.
Remainder | Customized Path minus Path mapped by Production.

Scope Maps

Production

Active Production Map [Path to Site/Property], when multiple ATI Sites or GA Properties are required.

Example: one Production Site/Property per Country.

You can also define here their corresponding Containers (GTM or Tag Commander).

PreProd

Active PreProduction Map [Host to Site/Property], when multiple ATI Sites GA Properties are required.

Example: one PreProduction Site/Property per Host: Dev, Integration, UAT, etc...

You can also define in this Map some alternate Web Application host names, when they cannot be declared as patterns.

Perimeters

Active Perimeters Map [Path to: ATI L2 / GA Content Group] and [Page Name Pattern].

Custom Dimensions

Visitor Origin

Track Visitor Origin (External, Internal, Dual) as a Site Custom Variable.

ID | Label | Meaning
0 | External | Visitor is connected outside the internal network.
1 | Internal | Visitor is connected inside the internal network.
2 | Dual | Visitor has been connected sometimes outside, sometimes inside during the last 30 days. If he/she no longer switches beyond these 30 days, this will be set as External or Internal.

To use it, Internal Pixel URL must be defined in User Options.

Site Variables

Activate/Deactivate Site Custom Variables definition list.

Page Variables

Activate/Deactivate Page Custom Variables definition list.

Click & Events

Components

Define the list and the rules of reusable {components} in all Click Types (upcoming feature).

Filters

Allows defining Common Attribute Filters for each Click Type:

A filter is understood as “Target (href) contains filter”.

You can enter them as a list separated by | (OR) or setup more complex filtering with logical operators: + (AND), ! (NOT). You can also filter on other attributes than href.

See FILTERS for detailed syntax and examples.

Then, these predefined filters can then be used in FILTERS columns as $f (optional).

Downloads

Activate/Deactivate Download Clicks tracking, accordingly to defined filters.

If you activate it, a new tab Downloads is displayed for configuration.

Navigations

Activate/Deactivate Inbound Clicks tracking when they have not been identified as Download.

A link is identified as a Navigation one when its target is relative or uses the same host than its page.

Other hosts can be considered as Navigation, but in this case, they must be defined in Customization JS file.

If you activate it, a new tab Navigations is displayed for configuration.

Exit

Activate/Deactivate Outbound Clicks tracking, when they have not been identified as Download nor Navigation.

When a visitor clicks on a link leading to another website, it is considered as an Exit click. See common rules.

If you activate it, a new tab Exits is displayed for configuration.

Actions

Activate/Deactivate other kinds of Click or Event Tracking (buttons, forms, controls, etc..).

Any click can be categorized as Action, but this type is usually reserved for those which are not explicitly Navigation or Exit, like a form submit or a list selection. See common rules.

If you activate it, a new tab Actions is displayed for configuration.

Trackers

Visitor

Activate/Deactivate Visitor Identifiers and Visitor Categories tracker.

With GA mirroring, Visitor ID is recorded as built-in User ID (usable in User views) plus a User Custom Dimension (usable in all views). Visitor Category is recorded as User Custom Dimension as well, possiblu completed by uploaded data to present its meaning.

If you activate it, a new tab Visitor is displayed for configuration.

Videos

Activate/Deactivate Youtube Videos tracker.

If you activate it, a new tab Videos is displayed for configuration.

By default, once this feature activated, all Youtube videos will be tracked so you have to refine the configuration only when you want to limit such tracking to a subset of pages.
MV Testing

Activate/Deactivate MV Testing module.

Only available when SmartTag option has been selected in Platforms tab.

Search

Activate/Deactivate Internal Search engine tracker: keyword, result pages displayed and clicked result position.

If you enable it, a new tab Search is displayed for configuration.

Sales

Activate/Deactivate Sales tracker (eCommerce), which allows capturing orders and products data

If you activate it, a new tab Sales is displayed for configuration.

OnSite Ads

Activate/Deactivate OnSite Ads trackers. (upcoming feature).

Injection

On Ready

Inject Clicks, Events and Trackers once DOM ready.

On Loaded

Redo Clicks and Events Trackers Injection once Page Loaded. To be checked to track controls or data still not present when DOM ready.

If there are contents still not present at this time, a synchronization can be done in Customization JS.

On Changed

When the Web Application uses a Dynamic Technology (Ajax, Angular, React, Vue...), this option allows injecting again all Clicks, Events and Trackers when the URL has changed.

Other change logics and full loading synchronization can be controlled in Customization JS.

Format

Edit Definition

Edit the Definition Line currently selected (upcoming feature).

Insert Definition Line

Insert a blank Definition above the one currently selected.

If there are Merged Definition Elements in this Line, it will be inserted above the first.

Delete Definition

Delete the Definition Line currently selected. If there are Merged Definition Elements in this Line, all will be deleted, so that you'll be asked for confirmation before.

Merge Common Definition Elements

Merge the Definition Elements currently selected. They must belong to the same column, otherwise you'll be warned.

If merged elements are populated with different values, you’ll be asked to confirm that the first will replace all.

Unmerge Definition Column(s)

UnMerge the Definition Elements currently merged. It can be done on multiple Column selection.

Autofit Columns Width

Activate/Deactivate Automated Columns Width adjustment after each modification.

When Autofit is Activated, Undo stack is prevented.
Move Definition Line Up

Move the Definition currently selected one Line Up, to increase its priority.

Move Definition Line Down

Move the Definition currently selected one Line Down, to decrease its priority.

Font Color

Allows changing the text color of selected Definitions, which can be useful to clarify sections in large Configurations.

Preview

See Preview

Container

Complements

Specific

Activate/Deactivate Specific Code inclusion or Configuration Variables Definitions. See Specific.

Includes

Activate/Deactivate the list of Libraries or Configuration Masters to be included. See Includes.

Third-Party

Asynchronous/Synchronous Tags to be added in Configuration's Container, triggered from Header or Footer. See Third-Party.

It's a better design to manage them with GTM or Tag Commander, except when they require Synchronous or Header implementation.

It can also be used to setup another TMS than GTM or TC, but in this case GDPR will have to be managed with additional customization code.

For asynchronous footer tags, use preferably Google Tag Manager / Tag Commander (header or synchronous tags cannot be managed with GTM nor Tag Commander).

Lookup Tables

Manage Lookup Tables, with the following modes:

· Edit, allowing to modify the Table characteristics and/or to open it once selected

· Creation, once New clicked, allowing to define a new Table.

· Remove, if you no longer need a Table.

Name

· Edit: Select Table name in the dropdown list

· Creation: Type Table’s name. Unexpected characters are filtered on the fly.

Input

Key column name of the Table, just for clarity (no consequences).

Output

Value column name of the Table, just for clarity (no consequences).

Description

Free description of Table’s aim.

New

Switch on Creation mode.

Remove

Remove the Table currently selected (after confirmation).

Cancel

Leave the dialog without action (discard all changes).

OK

· Edit: Open the Table to manage its content.

· Creation: Validate the new Table and open it.

Google Tag Manager

Production GTM Container

Set the Google Tag Manager Container used in Production (GTM-xxxxxx).

PreProduction GTM Container

Set the Google Tag Manager Container used in PreProduction (GTM-xxxxxx).

You can let it empty if it's the same than Production (recommended if your GTM trigger don’t check the host name).

Tag Commander

Production Tag Commander Container

Set the Tag Commander Container used in Production, as id/name.

Example: 4343/tc_MyGlobal_21

If you want a cache buster, add: ,cb

PreProduction Tag Commander Container

Set the Tag Commander Container used in Production, usually as id/uat/name.

Example: 4343/tc_MyGlobal_21

If you want a cache buster, add: ,cb

Configurator

About

Display the current version of XTag Configurator.

Check Update

An automated version checking is done every week: if you’ve declined it, you can proceed updating the Configurator by clicking there.

If the update is not necessary, you’ll be warned, however you can force it in case your installation has been corrupted.


Data Collectors

Production

Purpose

Configuration Platforms Analysis Container

When the same host name addresses several countries or independent applications, it can be required to track each of them in different storages, in order to keep levels 2 for another usage.

This worksheet allows configuring such split, based on first folders that can exist or virtually created by customization (for example if the country is in a parameter, or stored in a cookie, or not in a subsequent folder).

The list is sorted (alphabetically descending) during the generation process, so you can enter your values without worrying about logical order.

Fields

PATH ROOT

Initial or Customized Path Root .

GA|GTM|TC

Enter the Google Analytics Property specific to this path and/or its Google Tag Manager Container ID and/or its Tag Commander one, all separated by |.

Note that order doesn’t matter.

UA_xxxxxx | Google Analytics Property. Precede by @ if you want using Advertising snippet (DoubleClick)
GTM_xxxx | Google Tag Manager Container ID
TC:xx/yyyy | Tag Commander Container as id/name. Example: 4343/tc_MyGlobal_21 If you want a cache buster, add: ,cb
TCN:xx | Tag Commander Container index: reuse the id/name declared globally and change its index.

ATI SITE ID

Type a declared ATI Site ID. You can pick one from Sites List.

ATI SITE NAME

Automatically populated when ATI Site ID has been recognized.

Perimeters

Purpose

Configuration Platforms Analysis Container

Perimeters allows splitting the website in several sub-websites that can be assessed independently in AT Internet, or used as Content Group in Google Analytics.

Fields

PATH ROOT

Final Path Root.

Depends on option selected for the Final Path. As it is a root, it cannot use wildcards.

Examples:

www.example.com/us/en/company/contact, with /us/en mapped as SE United States account, /company as level 2
Final Path option | Path to be set
Initial or Customized | /us/en/company
Remainder | /company

www.other.com/company/contact, with /us added as first folder by customization and mapped as APC United States account, /company as level 2
Final Path option | Path to be set
Customized | /us/company
Initial or Remainder | /company

For an exact match, end with a dot. A dot alone means “the landing” (no path in URL): it will override the Default Page Name.

Examples:

PATH | Matches | Doesn’t Match
/solution. | www.example/solution | www.example/solution/all
/solution | www.example/solution/all | www.example/my/solution

LEVEL 2

Choose a Level 2 in the proposed list. If the list doesn’t fit your requirement, you can extend or modify with the Levels 2 Dictionary.

PAGE NAME PATTERN

In this column, you can specify for all URL matching specified Path:

Arrow: Slight curve | A constant page name, that will replace computed name in all cases.
Arrow: Slight curve | An exclamation mark (!), to exclude page from tagging (Level 2 column will be ignored).
Arrow: Slight curve | A pattern, by using following marks:

Mark | Replaced by
%p | Computed page name or nothing when already specified on the left.
::any_value | Computed page name::any_value. Equivalent to: %p::any_value. Any further %p will be removed.
any_value:: | any_value::Computed page name. Equivalent to: any_value:: %p. Nothing if previous %p.
#URL_param | URL parameter value (name is case insensitive). When parameter doesn’t exist: undefined
#URL_param1^#URL_param2^… | URL parameter List: will use the value of the first one defined and not empty.
#? | All URL’s parameters values, separated by |
# | URL’s anchor. When no anchor: undefined.
|any_value | any_value (separator between other marks)
<value indicator> | Text retrieved by a value indicator.
<selector>#attr | Attribute value of a selected node.

Resulting name is always cleaned from leading or trailing chapter marks, as well as multiple occurrences. When resulting name is empty, it is replaced by last name in Path (folder or page name).

Examples:

Page path | PATH | PAGE NAME PATTERN | Raised tag name
/corporate/customer_refs.cfm?ref_type=Product | /corporate | corporate::%p::#ref_type | corporate::customer_refs::Product
/product-family.aspx?name=DA-DL103-AME | /product-family | product-family::#name::# | product-family::DA-DL103-AME
/product-family.aspx?name=DA-DL103-AME#catalog |  |  | product-family::DA-DL103-AME::catalog
/press/news?article=2564 | /press | ::#article | news::2564
/company/jobs/job-with-us?id=65465 | /company | %p|-#id | job::job-with-us-65465
/press/news/viewer-news?id=32134 | /press/news | News::<H2:> | News::Schneider Electric Innovation

LEVEL2 NAME

Automatically populated with the name declared in Level 2 Dictionary tab.

Note that in case of GA Mirroring, Level 2 Name is used to populate the Section Content Group.

PreProd

Purpose

Configuration Platforms Analysis Container

When there are multiple non-production platforms that must be followed independently, or/and multiple production platforms, PreProd allows to configure each of them.

Fields

ATI SITE ID

Production ATI Site ID that must be switched to the preview one declared on this line.

Wildcard * is allowed, to match all those that have not been handled by previous lines, or to declare Alternate production platform.

ATI PREPROD SITE ID

Replacement ATI account that will be used when current host name matches the one declared in HOST NAME column.

Do not populate if you are declaring an Alternate production platform (current production account will be used when host name matches).

GA|GTM|TC

Replacement GA and/or GTM accounts that must be used as preview account (optional), with the same rules than for Production.

If left empty, production ones will still be used.

Do not populate if you are declaring an Alternate production platform.

HOST NAME

Host name that corresponds to this preview account (optional).

Example: intermediary.apc.com >> the declared preview account will be used for this platform.

Can be used to declare Alternate production platform, when * has been specified as ATI account and no preview account neither server have been set.

Always end by a line that doesn't specify anything in this column (to match all local or dev platforms).

ATI SITE NAME

Automatically populated when ATI preview account has been recognized.

Site Variables

Purpose

Configuration Platforms Analysis Container

Once Site Variables declared in AT Internet and possibly their Custom Dimension counterpart in Google Analytics, you can define here the way to grab their value in page content or context.

Fields

PATH PATTERN

Final path pattern .

VALUE

Value indicator returning Site Custom Variable.

INDEX

Set the corresponding index, as declared in AT Internet.

COMMENT

Type what you want in this field, usually the description of variable’s aim.

Page Variables

Purpose

Configuration Platforms Analysis Container

Here, you can associate custom variables to a limited set of pages. While site variables are related to the visit, page variables are related to the page views.

Fields

PATH PATTERN

Final path pattern.

VALUE

Value indicator returning Page Custom Variable.

INDEX

Set the corresponding index, as declared in AT Internet.

COMMENT

Type what you want in this field, usually the description of variable’s aim.

Clicks & Events

Downloads

Configuration Platforms Analysis Container

Set up the clicks that must be tracked as downloads.

See Fields below.

Navigations

Set up the links that must be tracked as navigations.

Link selections that do not match Navigation type control will be ignored (not tracked).

See Fields below.

Exits

Set up the clicks that must be tracked as exits. Links selections that do not match Exit type control will be ignored (not tracked).

See Fields below.

Actions

Set up the links that must be tracked as actions. Action tracking allows other events type than clicks (mouseover, submit, change, ...).

See Fields below.

Fields

PATH PATTERN

Final path pattern.

Examples:

Final path pattern | Match
/download/* | All pages under: www.schneider-electric.com/download
/podcast | www.apc.com/podcast
/gallery | www.junolightinggroup.com/gallery.aspx page
*/support/* | All pages having a “support” folder in their path
*/company | All pages named “company”, whatever their path (or their extension)
*/product*/* | All pages with a folder starting by “product”
* | All pages

NODE(S) SELECTOR

Node(s) selector . Retrieve a collection of ascendants, or directly the selected nodes when NODE TYPE matches the selector leaf.

You can indicate here the Components definition(s) for all the line. In this case, the rest of the line is useless (ignored if populated).

{myComp} | Use myComp definition in Components tab for all the line
{*} | Use all definitions from Components tab, except those forbidden for the type.

FILTERS
Purpose

The Filter select only nodes matching attributes condition. href is used by default when attribute name is not mentioned.

Syntax
filter | Node’s href Contains “filter”.
attr:filter | Node’s attribute attr Contains “filter”.
$f | Predefined Filter for the type.
| | OR operator
+ | AND operator
! | NOT operator

If there is nothing specified, all selected nodes are kept.

Link node

Optionally filter selected link(s) in selected page(s) by specifying a set of filter strings that should be contained in href attribute:

Examples:

.pdf|.zip|.swf|.mp3|.mp4 | Keep selected links with href containing .pdf or .zip or .mp3 or .mp4 in targeted URL.
www.se.com+.pdf|.zip|.swf|.mp3|.mp4 | Same than above, but www.se.com is always required in href.
!apc.com | Keep selected links with href not containing apc.com

All node types

Non-links nodes do not have any href attribute, so the attribute on which filter must be applied can be specified as following:

attribute:filter or attribute:!filter

Examples:

.pdf|name:dnLoad | Keep selected nodes with href containing .pdf or with a name attribute containing dnLoad.
.doc|class:!cta+class:!controller | Keep selected nodes with href containing .doc or with a class attribute not containing cta nor controller.
data-ng-if:!registration | Keep selected nodes without attribute data-ng-if or when it doesn’t contain registration.

NAME
Purpose

Name is optional: if nothing’s specified, standard naming rules will be applied, see click tag name.

Syntax

It can be:

Arrow: Slight curve | A constant name, which will replace standard name in all cases.
Arrow: Slight curve | A pattern, by using the following contextual variables and markers:

Contextual Variables

Replaced by

%c

Counter, based 1. This is the index of the node in the selected nodes collection (relative to selected ascendant).

%d

d estination: Exit: hostname /path, Navigation & Action: page name, Download: document name.

%f

First chapter of Content tag name. Example: page=myPage::en::index >> %f=myPage

%h

Hostname part of target URL, for Exit clicks only.

%l

Last part of current URL (without parameters nor extension).

%n

Name part of Content tag name (without chapters). Example: page=myPage::en::index >> %n=index

%p

Content tag name which have been raised by current page (value of xtpage).

%t

Target. This is the full path of target URL, without first /. Example: en/work/index.jsp

%v

Very last chapter of Content tag name (nothing if no chapter). Example: page=myPage::en::index >> %v=en

%x

Same than %p, but with chapter separators replaced by |

%?

Target parameters separated by |. For example: www.se.com?u=v&j=o: u=v|j=o

Markers

Replaced by

::any_value

Content tag name as prefix. Equivalent to %p::any_value.

any_value::

Destination as suffix Equivalent to any_value::%d

#attribute_name
#parameter

Node’s attribute value or, when doesn’t exist: link target parameter
In both cases, name is case insensitive.
When attribute doesn’t exist, it tries to find name in link parameters, otherwise: undefined.

#attr1^attr2^parameter

List of Node’s attribute value or, when doesn’t exist: link parameter. The first existing one of the list is used as value.
An empty value can also be specified to avoid undefined: #attribute_name^
In this case, if it is in a chapter, it will be removed.

#

Node text. When no text: undefined.

|any_value

any_value. Can also be used as separator between other marks.

<value indicator>

Text retrieved by a value indicator.

</selector>

Text retrieved by a node selector, by using current node as parent reference.
Note that such selector is allowed to navigate in parent hierarchy (by using </..selector>).

<selector>#attribute

Attribute value from node retrieved by a node selector.
Previous syntax can also be used, to start from current node as parent reference.

!...

An exclamation mark as first character prevents the tag to be raised. However, the expression behind is evaluated.

It can be used for excluding, for example in case of unsuitable bubbled events, or to simply trigger a JS function.

· Default name is equivalent to %p::%d for Navigation, Download & Action, %d for Exit.

· Improper specification, like missing attribute, is replaced by “undefined”.

· “undefined” is kept only in chapters (to ensure structure consistency), but it is discarded from leaf name.

· Empty chapters are removed.

All these default behaviours can be redefined in Customization JS.

Examples

Constant name

Click name | Raised tag name
schneiderele.taleo.net-Search Job | schneiderele.taleo.net-Search Job

Page Tag name

Current page (content tag) | Click name | Raised tag name
home | ::se_tv | home::se_tv
seg::buildings::hotels |  | seg::buildings::hotels::se_tv
seg::buildings::hotels | %v||%n::se_tv | buildings|hotels::se_tv
all-products | footer::%p::se_tv | footer::all_products::se_tv

Destination, Target, Hostname

Link type | Click name | Target | Resulting click name
Download (T) | teaser:: | /solutions/whitepaper.pdf | teaser::whitepaper.pdf
Download (T) | %d::teaser | /solutions/whitepaper.pdf | whitepaper.pdf::teaser
Navigation (N) | menu:: | /solutions/electricity | menu::electricity
Navigation (N) | menu::%t | /solutions/electricity | menu::solution/electricity
Exit (S) | header:: | http://twitter.com/SchneiderElec | header::twitter.com/SchneiderElec
Exit (S) | header::%h | http://twitter.com/SchneiderElec | header::twitter.com

Node attribute(s) or text

#attributeName is replaced by the value of “attributeName” in considered node.

To know what attribute name can be used, inspect HTML code underneath the link to be tracked (Chrome/Firefox: right click on the link, then “Inspect Element”): an attribute is a node property declared as attributeName="value" inside <>.

· Several attributes can be specified (one for each chapter plus name, meaning up to four).

· If specified attribute name doesn’t exist, or if its value is empty, it is replaced by “undefined”.

# used without attribute name is replaced by text displayed for the link.

· If there’s no text, it is also replaced by “undefined”.

· If you intend to perform results comparison between different countries, keep in mind that attribute values are invariant, while node text can be translated.

Click name | Raised tag name
schneiderele.taleo.net::#id | schneiderele.taleo.net::taleoSearch
#id::#class | taleoSearch::TF_submit_button

<a id="myLink" class="myClass" name="myName" title="myTitle" href="/mypath/target">Target text</a>

Click name | Raised tag name
Header::#id | Header::myLink
Footer::#class::#id | Footer::myClass::myLink
Footer::#class::#name | Footer::myClass::myName
Menu::#href | Menu::/mypath/target
Teaser::# | Teaser::Target text
#title:: | myTitle::target

Separator

Click name | Raised tag name
Footer::#id|_# | Footer:: myLink_Target text
Teaser::%p|-left-# | Teaser::home-left-Target text

Checkbox, Options List

FILTERS | NODE TYPE | HTML EVENT | ACTION NAME | Raised tag name
type:checkbox | INPUT |  | Status::</jsfunc:(function(n){return (n.checked?'checked':'unchecked');})> | Status::checked or Status::unchecked
 | SELECT | change | Option::</jsfunc:(function(n){return n.options[n.selectedIndex].value;})> | Option::my list option

NODE TYPE

Specify the node type to be selected (DIV, BUTTON, INPUT...). When omitted, links nodes (A) are selected.

HTML EVENT

Actions only: Specify the name of event to be listened in selected nodes.

Event | When...
submit | Form submission
mouseover | Mouse move over the node
mousedown | Mouse left click down
mouseup | Mouse left click up
change# | Input text or Select option
… | …

When omitted, only click event is listened.

Components

Purpose

Configuration Platforms Analysis Container

This tab allows defining all Clicks & Events with a Component approach, a very efficient way to define and maintain in one definition all the usages made of a CMS component.

After defining the Mother Class (Component with no identifier), it introduces two variables:

$c | Component Identifier
$t | Type Specific, as defined in type columns

Fields

COMPONENT

Component unique identifier, and value of $c. If empty, it will be considered as the default or Mother Class, from which other columns will be used when not defined.

NODE(S) SELECTOR

Node(s) selector . Retrieve a collection of ascendants, or directly the selected nodes when NODE TYPE matches the selector leaf.

FILTERS

See FILTERS .

NODE TYPE

See NODE TYPE .

HTML EVENT

See HTML EVENT .

L1 CHAPTER, L2 CHAPTER, L3 CHAPTER, LEAF NAME

The content of the corresponding click name part. Can be defined as a NAME chapter, but also by using $c or $t.

If not specified, it reuses Mother Class definition.

DOWNLOAD, NAVIGATION, EXIT, ACTION

Define the value of $t for each type. Use an exclamation mark ! to indicate this component must not be used with the corresponding type.

Visitor

Purpose

Configuration Platforms Analysis Container

This tab allows registering Visitor ID and/or Category.

Visitor ID is an alphanumeric value. Visitor Category must be a numeric value.

Before being collected, all possible categories must be declared in AT Internet

Fields

PATH

Final path pattern.

VISITOR ID

Value indicator returning Visitor ID.

VISITOR CATEGORY

Value indicator returning Visitor Category. This must be a numeric value, declared in account configuration before registration.

If you need to perform a mapping between an alphanumeric value available in page and such numeric value declared in account, you can setup an Lookup Table.

Then, Category can be setup by using the following value indicator:

js:stat_map.key2value([map], [alphanumeric value],true);

with:

[map] | get[LookupTableName]Map.
[alphanumeric value] | Value collected in page. You can use a node selector as following: stat_dom.getSelectorText(nodeSelector) Or a value indicator as following: stat_settings.getFieldValue(valueIndicator)

Example:

Value indicator using the Lookup Table “Category”

js:stat_map.key2value(getStatCategoryMap(),stat_dom.getSelectorText('globalContactPrimaryChannelCode'),true);

Search

Purpose

Configuration Platforms Analysis Container

The configurator allows to setup search tracking without changing page content, neither tracking code nor data layer.

Fields

PATH PATTERN

Final path pattern. It must identify the search result page(s).

RESULTS LINKS SELECTOR

See Node(s) Selector. Select the area where results links must be tracked.

By default, only links nodes (<A>) are considered in the selection, but customization can decide to track any other type.

FILTERS

Same filtering syntax than Click & Events FILTERS.

KEYWORD

Value indicator returning the keyword(s) that leaded to the current result page. If there are several keywords, they must be separated by spaces.

PAGE NUM

Value indicator returning the index of current result page, based 1.

0 means “Search Without Results”.

PAGE SIZE

Value indicator returning the number of results per page.

#LINKS/RESULT

Value indicator returning the number of links contained in one result, 1 by default.

It is important for Click Search Position calculation.

COMMENT (OPTIONAL)

Type what you want in this column.

Sales

Purpose

The configurator allows to setup order & products tracking without changing page content, neither tracking code nor data layer (as required by all others tag management systems).

· Most of fields are populated with value indicators.

· For an order value, in most cases, it can be easily achieved with XTag Selector (by choosing “... for Value extraction” in context menu).

· For a product value, which is not unique but a collection, a relative syntax must be used, see Product Collection.

· For calculation with jsnum, you can use variables name corresponding to fields (indicated in bold gray in each field description below), but only from left to right (xt_roimt can use xt_totalTF, but not the contrary).

Example:
jsnum:(xt_totalATI-xt_totalTF) >> tax calculation

For results presentation, proper currency for the account must be declared in: Tools > Configuration > Goals and Sales > Customisation > Currency

Cart & Order

Configuration Platforms Analysis Container

MODE
Definition

Mode | Description
Cart | Basket products registration: it expects products list to be populated, and nothing else. This mode is useful when product registration is separated from order confirmation, or to activate “Abandoned products” analysis >> In this case, Full order or Pre-Order must embed final products list. Cart ID is mandatory, other fields will be ignored.
Full order | Confirmed order registration. To be used when page after payment contains all expected data (order summary, possibly products). Order ID is mandatory, and corresponding page(s) must be declared as Main Goal.
Pre-Order | Order and products registration. To be used in combination with Confirmation. Useful when: Order page doesn’t provide Order ID (for example before payment). Confirmation page (when Order ID provided) doesn’t contain all data. Cart ID is mandatory.
Confirmation | Order confirmed. To be used in combination with Pre-Order. Both Order ID and Cart ID are mandatory, and corresponding page(s) must be declared as Main Goal.
Update | Order modification (status, amount). Don’t use, still not implemented.

Valid combinations
Modes | Description
Full order | Record confirmed order and products list
Cart, Full order | Record products list, then confirmed order (optionally with final products list)
Pre-order, Confirmation | Record pending order with products list, then order confirmation
Cart, Pre-order, Confirmation | Record products list, then pending order (optionally with final products list), then order confirmation

· Any other configuration would be invalid or incomplete.

· There could be several occurrences of each mode

Main Goal

Confirmation pages (indicated by Full order or Confirmation) must be declared as Main Goal pages in AT Internet:

Tools > Configuration > Goals and Sales > Goal pages

1. Click on Add

2. Find your confirmation page among existing page names,

3. Click on > to add it in Main goals pages list,

4. Repeat 2 & 3 for each confirmation page,

5. Click on OK

Order collection starts about one hour after this declaration

PATH PATTERN

Final path pattern.

· This is the path where order data or cart content can be found.

· This information is mandatory in all modes.

CART ID

Value indicator returning the shopping basket identifier.

· Must be populated when you want to follow abandoned products (mode Cart), or if order is achieved in two steps (modes Pre-order and Confirmation).

· When populated, it must be unique for AT Internet (and not only for the customer).

· All fields below are not considered in Cart mode.

Variable name: xtidcart

ORDER ID

Value indicator returning the order reference.

· Must be populated when you are tracking an order which has been realized (modes Full order or), whatever its status.

· It must not exceed 50 characters, and must be unique for AT Internet (not only for the customer).

Variable name: xt_orderid

ORDER AMOUNT (TAX FREE)

Value indicator returning the total amount of order without tax, discount applied.

· Must be populated when website sells with or without tax, in modes Full order or Pre-order.

Variable name: xt_totalTF

ORDER AMOUNT (TAX INCLUDED)

Value indicator returning the total amount of order with all tax included, discount applied.

· Must be populated in modes Full order or Pre-order, except when website sells without tax.

Variable name: xt_totalATI

Discount & Customer

Configuration Platforms Analysis Container

DISCOUNT AMOUNT (TAX FREE)

Value indicator returning the total discount without tax, if any (optional).

· Not considered in Confirmation mode.

· Can be populated when Order amount (tax free) has been setup.

· This value can also be provided by products. In this case, this amount must be greater or equal to the addition of all product discounts (tax free).

Variable name: xt_discountTF

DISCOUNT AMOUNT (TAX INCLUDED)

Value indicator returning the total discount with all tax included, if any (optional).

· Not considered in Confirmation mode.

· Can be populated when Order amount (tax included) has been setup.

· This value can also be provided by products. In this case, this amount must be greater or equal to the addition of all product discounts (tax included).

Variable name: xt_discountATI

NEW CUSTOMER (0/1)

Value indicator returning 0 when current order is for a registered customer, 1 when this is a new one.

· Not considered in Confirmation mode.

· In most cases, this will be a constant value, or a calculated one (with jstext: or jsnum:).

Variable name: xt_newcus

Shipping & Tax

Configuration Platforms Analysis Container

SHIPPING METHOD

Value indicator returning a numeric ID that indicates the shipping method, corresponding to one of those declared in:

Tools > Configuration > Goals and Sales > Label > Shipping methods

· Not considered in Confirmation mode.

· This field can also embed both: ID[Label], like: 1[Colissimo]
It means that, in most cases it cannot be retrieved by using a simple selector, a jstext: or jsnum: should be necessary.

· Label must not contain specific characters.

· If a label is already registered for a given ID, it will not be saved.

Variable name: xt_delivery

SHIPPING (TAX FREE)

Value indicator returning the total amount for shipping, without tax (optional).

· Not considered in Confirmation mode.

· Can be populated when Order amount (tax free) has been setup.

Variable name: xt_shipTF

SHIPPING (TAX INCLUDED)

Value indicator returning the total amount for shipping, with all tax (optional).

· Not considered in Confirmation mode.

· Can be populated when Order amount (tax included) has been setup.

Variable name: xt_shipATI

TAX

Value indicator returning the total amount of tax that you want to follow (optional).

· Not considered in Confirmation mode.

· It can be inferior or equal to the difference between Order amount (tax included) and Order amount (tax free).

Variable name: xt_tax

Payment, Status, Promo and ROI

Configuration Platforms Analysis Container

PAYMENT METHOD

Value indicator returning a numeric ID that indicates the payment method among those declared in:

Tools > Configuration > Goals and Sales > Label > Payment methods

ID | Name | Category | >> You can complete this list with your own payment methods
1 | Credit and debit card | Bank cards
2 | Visa | Bank cards
3 | MasterCard | Bank cards
4 | Cheque | Cheque
5 | Store credit card | Credit cards
6 | Financing | Credit cards
7 | Wire transfer | Bank transfer
8 | Direct debit | Direct debit
9 | PayPal | Electronic cash

Variable name: xt_paym

ORDER STATUS

Value indicator returning a numeric ID that indicates the order status, among those declared in:

Tools > Configuration > Goals and Sales > Label > Order status

ID | Description | >> This list cannot be modified
0 | No information
1 | Pending
2 | Cancelled
3 | Validated

Variable name: xt_status

PROMO CODE

Value indicator returning a promotion code used for order (optional).

· Not considered in Confirmation mode.

Variable name: xt_promocode

SALES TURNOVER INDICATOR

Value indicator returning the sales amount that you want to display in your analyses (Source analyses in particular).

You need to assign a value depending on your needs: it can be the same that Order amount (tax free), or Order amount (tax included), or any calculated value which represents the best your Return Of Investment.

It can be for example a calculation like: jsnum:(xt_totalTF-xt-shipTF)

Variable name: xt_roimt

Product Selection

Configuration Platforms Analysis Container

PRODUCT COLLECTION
Definition

This field must be populated with a nodes selector which retrieves an array of nodes containing all product data.

Two kinds of data structuration can be managed at configuration level, by defining Product Group:

· Hierarchical
Each Product is contained in one parent node, and product data are contained in its children.
This is the most common case, where Products Collection must retrieve all parent nodes, even if some of them are useless: Product group defines the sequence where this parent node can be found, always at the same place.
Example: A TABLE with sequences of two TR without specific class, one for comment and one for Product data: Collection retrieves all TR, Product group=2.

· Flat
Each product data is contained in the same node type (value or children), N nodes defining one product. In other words, there’s no parent gathering all fields of one product.
In this case, Product Collection must retrieve all these nodes, and the Product group defines N.
Example: Set of DIV, the first containing the Product ID, the second containing Quantity, the third containing Unit Price, etc... up to five for each Product. Collection retrieves all DIV, Product Group=5.

All other kinds of structuration cannot be handled at configuration level and require using customization API. However, in some cases, a jsnodes: specification can do the job (for example if collection must aggregate several node selectors).

Then, all product fields (indicated with light green header) must be populated with relative value indicators, as described below.

Relative Value Indicator

Whatever the structuration, product value indicators are addressed relatively to their group:

Value indicator | Value retrieved
%n/ | Content of nth node in current group, with: 0 <= n < Product Group (then always 0 if Product Group is 1) Note: a hierarchical organization is identified by the fact that n is always the same index.
%n/selector | A child node belonging to the nth node in current group (with the same restrictions than above).
js:code | Same as usual js:, but where code can contain %n retrieved as string. Example: jstext:(%0+’::‘+%1) >> Concatenation of two nodes content with chapter separator.
jsnum:code | Same as usual jsnum:, but where code can contain %n retrieved as number. Example: jsnum:(%0+%1) >> Addition of two nodes values.
jsfunc:myFunction | Same as usual jsfunc: selected node is used as parameter to call myFunction. Example: %0/H4:[1]/jsfunc:gdl_sales.getNodeProductSKU >> Call this external function to extract Product SKU from the second H4 in current row.

PRODUCT START INDEX

Allows to jump first nodes that would not contain any product data. It can be 0 (by default) or a positive integer value.

Example: A collection of TR where the 3 first are used for Order Summary, so that Product Start Index=3.

PRODUCT GROUP

Defines the group size. It must be a positive integer value, greater than 0 (1 by default).

It can be used for both organizations:

· Hierarchical
Greater than 1 only when not all parent nodes contain Product data.
For example if only even nodes must be considered as parent nodes: Group = 2.

· Flat
To define the number of nodes (N) defining one and only one product.

Product Data

Configuration Platforms Analysis Container

PRODUCT ID

Relative value indicator returning the product identifier / sku (mandatory)

Variable name: xtp_id

PRODUCT DESCRIPTION

Relative value indicator returning the product label

Variable name: xtp_desc

PRODUCT CATEGORY

Relative value indicator returning the product category

Variable name: xtp_cat

PRODUCT UNIT PRICE (TAX FREE)

Relative value indicator returning the unit price without any tax.

Variable name: xtp_upTF

PRODUCT UNIT PRICE (TAX INCLUDED)

Relative value indicator returning the unit price with all tax. Can be the same as previous.

Variable name: xtp_upATI

Product Sale

Configuration Platforms Analysis Container

PRODUCT QUANTITY

Relative value indicator returning a positive integer value greater than 0 (mandatory).

Variable name: xtp_qty

PRODUCT DISCOUNT (TAX FREE)

Relative value indicator returning the amount deducted from Product sale (tax free), whatever the method.

Example:

Unit price = $100, Quantity = 4.

1. The product discount is applied to a specific quantity of purchased products, let say $15 discount for 2 products purchased
> Product Discount = $30

2. The product discount is a percentage of sale, regardless of quantity ordered, let say 10%
> Product Discount = $40

Variable name: xtp_discountTF

PRODUCT DISCOUNT (TAX INCLUDED)

Relative value indicator returning the amount deducted from Product sale (tax free)

Same principle than above, but all tax included.

Variable name: xtp_discountATI

PRODUCT PROMO CODE

Relative value indicator returning the promotion code applicable to this product.

Variable name: xtp_promocode

PRODUCT TOTAL SALE

Relative value indicator returning the amount that must be considered for sales analysis.

It’s up to you deciding if it considers tax or discount.

Variable name: xtp_roimt

Videos

Purpose

Configuration Platforms Analysis Container

This tab is used to activate YouTube videos tracking. To be automatically tracked, a YouTube video must be embedded as usually recommended, meaning by using an iframe.

Example:

<iframe width="100%" height="100%" src="https://www.youtube.com/embed/sIJ73G4sww?wmode=opaque">
</iframe>

In iframe src, it’s better adding &enablejsapi=1, but it is automatically added by XTagManager when not present.

Fields

PATH PATTERN

Final path pattern. It must identify the page(s) containing videos. If empty or *, all pages will be considered.

AREA SELECTOR

See Node(s) Selector. Select the area where videos can be found (XTag Selector “For Area selection”) or let empty to consider all page content.

COMMENT (OPTIONAL)

Type what you want in this column.

Specific

Purpose

Configuration Platforms Analysis Container

Code

Specific code is used to add any JavaScript code or JSON objects in page’s header, like Third-Party can do.

The difference is that there’s no triggering condition nor control: this code is loaded and executed in page as it is, before customization & library inclusions, directly in configuration file (so without using document.write or whatever), then without mapping nor filtering and above all without any exception management.

So keep in mind that any wrong entry in this tab could lead to page errors and/or analytics' breaking. Use cautiously!

It is mainly used to add specific configurations, or to add simple JavaScript routines intended to be called by nodes selectors or value indicators , thus avoiding a customization file. Note that in these cases, such routines will be executed with exception management.

There’s only one column to fill, where an area contains the code to be added. It can be extended by inserting rows inside it.

Variables

Up to five variables can be defined here, and then reused anywhere (maps, customization code, names, etc...) with their index, for example: %variable1%.

It is especially useful in master Configurations, allowing regular ones to define some contextual values: master use such variables in their entries, and regular define them.

DemandBase fields

By default, this area is used to activate and configure DemandBase feature, by using a JSON structure with the following fields:

Attribute | Setting | Default
StopChecking | true if we want to stop adding DemandBase data to ATI tag | false
Async | true for asynchronous call to DemandBase server (slow websites), false for synchronous. | true
Key | DemandBase key allowing data request |
StartParam | First ATI site custom variable index that will be used to send data 4 >> use x4 as first site custom variable, then x5, x6, … | 1
ExpireDays | Number of days without requesting DemandBase again. If 1, one request will be done per session. | 1
Fields | DemandBase data that must be sent to ATI as site custom variable. |
Map | Array of Arrays (field name, value:map, …): allow conversion of retrieved value into a value recognized by ATI. |

Variables

Specific allows declaring up to five Variables, that can then be reused in any Configuration stuff with %variable[index]%.

Additional mappings

Some legacy containers used Specific to manage additional mappings. XTag Configurator still take them into account, and even sort them automatically at Publication time. However, for any new mapping, it is now recommended using the dedicated feature Lookup Tables

Includes

Purpose

Configuration Platforms Analysis Container

This is the place where you can decide about containers inheritance or additional libraries.

Fields

INCLUDE

Enter a JS file that can be found in the Configuration directory, or in the Libraries paths.

Third-Party

Purpose

Configuration Platforms Analysis Container

This is the container allowing to setup additional tags or inclusions for third party systems, or to write anything in page.

It is recommended to use GTM or TC for third party tags, but as they are unable to add tag in page’s header nor synchronous ones, it can be used when one of both condition is required, or when none of both is set.

Fields

ATI SITE ID(S)

Enter the ATI account that must be the current one to raise the added tag. It can be a list separated by |, or a wildcard * to match all.

583046|583057|585769|586138|585773|586131|583059|586130|606710|585774

Note that PreProd Site ID(s) must be added as well to allow tag raising in PreProd mode, or you can add a dedicated entry for it.

Site ID filtering is not allowed on Header tags, except when there is only one production account.

PATH

Contrary to all other mappings, it always considers Original Path, but it can also embed the host name if it starts by // instead of /.

As for ATI SITE ID(s), it can be a list separated by |, or a wildcard * to match all.

SYNCHRONOUS CODE

It can be HTML or Javascript code. In both cases, double quotes must be replaced by single ones.

HTML code can be Javascript file inclusion, like this Adobe DTM integration:

<script src='//assets.adobedtm.com/e950cf52ad8cc87cfd4de9bb989d1a2e93e9c8ea/satelliteLib-7fcbb7ed74aaf36079297db84638471fcce292e8.js'></script>

JavaScript code must not contain any comment, nor <script> tags:

_satellite.pageBottom();

Synchronous code is executed with exception management.

ASYNCHRONOUS LOADED SCRIPT

URL of a JavaScript file to be loaded asynchronously. It is recommended to not specify the protocol (start by //), to be valid for both SSL and regular pages.

//static.atgsvcs.com/js/atgsvcs.js
CODE TO EXECUTE ONCE SCRIPT LOADED

JavaScript code to be executed when asynchronous script file has been loaded. It cannot be a JavaScript inclusion.

raiseATG();

Asynchronous code is executed with exception management.

ACTIVATION

Enable the tag in Header (where configuration file is included), or Footer (where pageStatInjection() is called) or set it as Disabled.

Level 2 Dictionary

Purpose

Configuration Platforms Analysis Container

This tab contains the restrictive list of selectable Level 2, with their corresponding names.

Fields

The original Level 2 list comes from Configuration Template . For the current Configuration, it can be modified, or extended as following:

1. On the first blank line, type the number in the first column:

2. Enter or Tab will reorder it in the list:

3. Type its name, as declared in AT Internet:

Versions

Purpose

Configuration Platforms Analysis Container

This tab contains the history of Commits and Publication, with their author.

Fields

VERSION

DESCRIPTION

COMMITTED

PUBLISHED

AUTHOR

Test Cases

Purpose

Configuration Platforms Analysis Container

This list is used to specify all expected tags and actions to raise them.

Please note this feature is currently under redesign and ascending compatibility will probably not be ensured.

Commands

Command | Action
# | Generate version worksheet in TestCases_XX.xlsx in configurator’s directory. If this version already exists, you are prompted to confirm that it must be replaced. If shift key is down when clicked, formatting commands below are kept in generated worksheet.
Title | Format current line as Title. Used to name following actions, or to describe an action without tag generation.
Url | Format current line as Url . Used to indicate Url displayed for a content tag.
Action | Format current line as Action. Used to describe an action generating a tag (click tag, or content tag without Url change).

Each click on formatting commands updates all existing Test cases indexes.

Fields

#

Test case index, automatically populated when formatting command is clicked.

Title, Url or Action

After formatting the line with corresponding command, type expected indication.

In case of Action, describe the place where it is done. In case of Url, address in automatically truncated from protocol.

Account

Account number expected in production.

Level 2

Level 2 number expected.

Name

Page name or click name (except for Search position click).

Click

Select expected click type in the list: Action, Download, Exit, Navigation, Search pos.

Search words...

Searched keywords, when current page is a search results page, or current action is a click on search result.

This column and the next two are visible only if Search tracking has been activated in configuration.

...page

Page number, when current page is a search results page, or current action is a click on search result.

...pos

Position of click, when current page is a search results page, or current action is a click on search result.

Visitor ID & Cat.

Numeric visitor ID, if any, and Numeric Visitor category ID, when available.

These columns are visible only if Visitor identification has been activated in configuration.

Sales

Two columns that must be populated with Sales parameters (on the left) and expected data (on the right).

These columns are visible only if Sales tracking has been activated in configuration.


GA Mirroring

Purpose

Context

GA Mirrroring is an exclusive XTagManager feature using all captured events and their related data to format and send corresponding tags to Google Analytics, with GA enrichments when needed (enhanced eCommerce impressions, clicks, details, etc). This engine is fully customable, so that it can apply any kind of event naming logic.

Each time a tracker is added to AT Internet, its GA correspondence is automatically setup and sent at proper time: this is a full and permanent synchronization between both Web Analytics platforms: setup once, tag twice!

By the way, GA Mirroring activates enhanced page load time measurement, allowing to know accurately what’s the page load time performance really experienced by end users: see Site Speed .

Last but not least, when campaign URLs don’t provide GA counterpart parameters, it forwards all AT Internet campaign details (except its declared name, replaced by ATI code), so that traffic source is also always properly categorized on GA side. And it also catches and logs in ATI those only tracked on GA (i.e. not declared with the regular process).

It is recommended to install XTag Google Analytics to discover the richness of GA Mirroring features.

Accuracy

Free version of Google Analytics can use data sampling, when the number of analysed sessions is greater than 500K. When it happens, user is warned:

Most of time it doesn’t change the trend, but if you see this message and want to be sure about presented figures, just reduce the assessed period (more information here ).

Note that AT Internet never uses data sampling.

Conventions

Custom Dimensions
User Country

Optional. To be setup when user country can be different from web application country and geolocation (country clustering). This custom dimension contains a two-letters code representing the country affected to the session.

Origin

Optional. This is the user position regarding company’s network: External, Internal or Dual (if it has changed on last 30 days). Only External are considered as non company’s users.

This distinction cannot always be setup with IP filtering, when proxy can change company IPs regularly, with more than 70 properties (just for SE) to update each time. Moreover, that would not identify “Dual” (employees working outside company’s network), and that would prevent cross-segmentation with other dimensions inside a view.

ATI Tag

Mandatory. This is the original ATI Page name, forwarded for page consolidation. Such consolidation cannot be done with query parameters exclusion for the following reasons:

· https://www.schneider-electric.us/en/product-category/50300-circuit-breakers/?filter=business-4-low-voltage-products-and-systems and https://www.schneider-electric.us/en/product-category/50300-circuit-breakers are the same, but filter parameter can be useful in some reports.

· With all marketing systems used by the company + application specificities, exclusion list would be too heavy to maintain in more than 70 properties (just for SE).

· With specific cases like FAQ, it cannot be used as a consolidation method.

ATI Level2

Mandatory. The numeric value of AT Internet Level2, forwarded for application identification. It is convenient to easily identify the traffic of applications with several URLs patterns.

It can be used as filter to create dedicated views:

User category

Optional. Map ATI Visitor Category Code. Should be completed with an upload of their meaning.

User ID

Mandatory. Map ATI Visitor Identifier (numeric or text). Also stored as built-in GA userid, but a custom dimension is more flexible for reporting usage in all views.

User category name

Optional. Not collected: this is a dataset upload to match User category, for reporting purpose.

Click Type

This dimension doesn’t exist in Google Analytics, but based on Events naming conventions, it can be retrieved:

ATI | GA
Click Navigation | Event Label contains a relative path (starts by “/”)
Click Exit | Event Label contains an URL with protocol (starts by “http”)
Click Download | Event Action equal to ”Download”
Click Action | Event Action is not equal to “Download” and no path nor URL in Event Label (such action type is not a useful information in GA)

Level2

This dimension doesn’t exist in Google Analytics, but it is forwarded as custom dimension ATI Level2, so it can be used for segmentation. Content grouping is also used, but not with the same split logic. Views can also be used for this purpose.

Google Analytics Preparation

Property

Creation
Scope

The property must address the same scope than its corresponding AT Internet account.

Optionally, you can also create a dedicated preview property, that will automatically be used in all non-productions environments. In this case, it must be named the same, with “Preview“ as prefix. If you don’t, a generic Preview will be used, which merges different sources of non-production traffic.

Website Name

Use the same naming convention than in AT Internet.

Website URL

Enter the proper protocol and host, without any path.

Reporting Time Zone

Important for day split.

Property Settings

Tracking Info
User-ID

User ID policy must be agreed in order to create User View.

Referral Exclusion List

Referrals must be excluded accordingly to your website hostname(s).

Custom Definitions
Custom Dimensions

The following Custom dimensions must be created:

Status | Custom Dimension Name | Index | Scope
Optional | User Country | 1 | Session
Mandatory | Origin | 2 | Session
Mandatory | ATI Tag | 3 | Hit
Mandatory | ATI Level 2 | 4 | Hit
Optional | User Category | 5 | User
Mandatory | User ID | 6 | User
Optional | User Category Name | 7 | User

· When Custom Dimension is not required for the website, create it anyway if it’s not the last, but as Inactive to keep the same index for others.

· If there are already existing Custom Dimensions using these required indexes, they can be customized in Mirroring JS .

Data Import
User Category Name

1. Prepare a CSV file containing the correspondences between ATI Categories ID and names.

2. Click on CREATE

3. Select User Data, click on Continue

4. Enter User Category Names, select all views, click on Continue

5. Select User Category as Key:

6. Select User Category Name as Imported data, Select Yes to override, then Save

7. Then Finished , and Back to Data Import

8. Click on Manage uploads, then UPLOAD FILES

9. Click on Choose files , select on your disk the file imported from box, then click on Upload

10. After some seconds, you should see the upload Validated, then Completed:

Views

Create View
All Web Site Data

Created by default.

User View

Ensure you have prepared your property to allow User ID views (see Tracking Info). If you’ve just did it and that you still don’t see the User-ID view option as shown below, reload the page (F5).

Name it User View and activate the Show User-ID Reports option, then click on Create View :

Other Views

To be setup accordingly to your web application’s specificities.

View Settings
Default URL

Let the same than the one setup at property level, still without any path.

Time zone country or territory

To be setup accordingly to targeted country.

Exclude URL Query Parameters

To be setup accordingly to your web application’s specificities.

Currency displayed as

To be setup accordingly to targeted country.

Bot Filtering

Site Search Settings

To be setup accordingly to your web application’s specificities.

Goals

Goals will be defined by application teams. Hereafter some examples (to be detailed further):

Content Grouping
All Websites

1. Click on + NEW CONTENT GROUPING

2. Enter Section as Name, then click on + just below GROUP BY TRACKING CODE

3. Let default index 1, click on Done

4. Click on Save

You should obtain that:

Filters
Allowed hostnames

It is recommended to create a traffic filter, in order to be sure that only expected traffic is collected in this view.

E-Commerce Settings
Activation

Enhanced eCommerce must be activated in all views of all websites (except those without Product traffic):

Funnel Steps

On real eCommerce websites, Checkout funnel steps must be setup.

Example:

AT Internet Preparation

Custom Source for GA Campaigns

To catch Google Analytics campaigns not tracked in AT Internet, a custom source must be created:

1. | In Analyzer NX, click on Tools menu, select Sources and campaigns, then click on Custom:
2. | Click on Sources tab, then on Add , name it GA Undeclared Campaigns and declare four variables: utm_source, utm_medium, utm_content and utm_campaign. Once all set, click on OK .
3. | Wait a couple of minutes, then click on Campaigns tab, then on Add , let Manual activation and enter 10000;Generic Undeclared GA Campaigns in the List of campaigns. Once all set, click on OK ..

Collected Data

Customization

Segments
External Traffic

Custom Reports
Identified Users

Usability

Downloads

Outbound links

Filter Regex: ^http

Internal links

Filter Regex: ^\/

URL Variation, Consolidation and Performances

ATI Tag to URLs

URL to ATI Tag and Level 2

Audience

User Explorer

Identified users are can be assessed in User View, so with all user explorer features activated. GA Mirroring provides User ID once visitor logged in.

Drill down a user allows to see its category, the device he used, its sessions and all actions he made:

It also allows to see an estimation of global device overlap:

Acquisition

Campaigns coming from AT Internet

When there’s no utm_* parameters in a campaign URL, ATI data is used to forward campaign information to Google Analytics:

The campaign name is built from AT Internet campaign type and ID. The rest (source, medium, content & term) is built from campaign fields, by using GA best practices and company’s rules.

GA Campaigns not declared in AT Internet

The regular process implies that all campaigns must be declared in AT Internet: this is the only way to control the proper categorization allowing global reports.

If this step is omitted, GA campaigns will appear in AT Internet in a custom source named GA Undeclared Campaigns:

Behaviour

Site Speed

Before plugin activation:

After plugin activation:

Site Search
Overview

Search Terms

Site Search Category

When available in Web Application internal search engine.

Additional data

See Search events below.

Site Content
Content grouping

Section

Sections are based on ATI Level2, but GA Mirroring customization can decide to gather or split some of them.

Events
Search events

Event Category

It contains the Search area or the Clicked positions area, or the Result links area.

Event Action

In case of Search area, it contains With results and Without results and possibly GuidedSearch

In case of Clicked search position, it contains the positions of click:

In case of Results, it contains the clicked path:

Event Label

With all Search Event Categories, it contains the searched keywords. For example inside Without results:

In case of such unsuccessful search, keyword is completed with activated filter, like above with CAT_PRD_CAD.

Videos events

Event Category

Video

Event Action

It contains user interactions and play rates:

Event Label

It contains video title:

CTA events

Event Category

It contains the area of CTA.

It can be a common area when CTA is a common to all pages, or the type of the page when CTA depends on page content:

Event Action

It contains the type and/or the title of CTA: this is a landmark to identify it in the Category (area). In common areas, this is just an identifier. In page content, most of time, a component name precedes the identifier itself:

Download CTA always use “Download” as Event Action, whatever the place from where it has been triggered.

Event Label

· Downloads
Event Label contains document characteristics (using website convention) or simply its name.

· Other Links
Event Label contains the target: as relative path when internal link, with full protocol when outbound link.

· Other CTA
Event Label can contain additional data about the action, or nothing.

Default mirroring remove parameters from such path and URLs. When they are added, they use pipe separators instead of ? and &

Conversions

Shopping behaviour

All websites presenting a Product Offer: Product Views are recorded, with possibly Add to Cart or Favourites or to Comparator measured as “Add to Basket”.

Checkout behavior

eCommerce websites only, once funnel steps properly defined:

Product Performance

eCommerce websites only:

Sales Performances

eCommerce websites only:

Product List Performance

With enhanced eCommerce activated in the view, several Product lists are populated:


Settings

User Options

Configuration

To be documented.

JS Names
Configuration
Customization
Visitor Origin
Internal Pixel URL
ATI Libraries
xtcore Path
SmartTag URL
Clicks Target Filters
Downloads
Navigation
Exit
Action
Repository
Git Remote

Common

General
Author
Localhost Path
Template Path
Sharing Path/URL
Online Help
Libraries
Release Path
Debug Path
Publisher

Modules Path
Target Host
Upload Type
CDN
S3

Host
Bucket
Key ID
Key Secret
FTP

User
Password
Proxy

Publishing behind a proxy

If you Publish on FTP through an enterprise proxy, maybe you’ll have to declare it for passthrough. This option allows to activate/deactivate those declared in order to adapt the place you are.

HTTP
HTTPS
Akamaï

Purge Host
Access Token
Client Token
Client Secret
Git

Ensure your Git setup is complete. If it is not, that doesn’t prevent to publish, but your change couldn’t be committed.

Shared Assets

Configuration Template

To accelerate the creation process, it is recommended (but not mandatory) to customize the Configuration Template with your organization’s common settings.

This customization can be done further and changed at any moment without disturbing existing Configurations.

1. Run XTag Configurator.

2. Click on Open, then on Browse...

3. Navigate to the template folder and open xtmTemplate.xlsm

4. In Configuration ribbon, adjust a common Host Name Pattern that could match most of Production hostnames in your organization.

5. In Platforms ribbon, you can enter a default Production and PreProd site ID, and the same for GA properties.
Possibly, activate Perimeters and setup the default Levels 2 Dictionary.

6. In Analysis ribbon, select the common features usually activated in your organization.
You can also define common Filters, to define at least the Downloads extensions.

7. In Container ribbon, you can define usual Specific code. You can also define Sandbox containers for GTM or Tag Commander.

8. In Downloads, Navigations, Exits and Actions tab, setup your default naming logic, for example:

9. Once your Template prepared, Save it: all those settings will be used as default by each New Configuration, and then possibly refined when necessary.
And If you copy it in your Shared folder, it will also be used as template by your co-workers.

10. Close XTag Configurator.

Sites List

Configurations List


Customizations

Customization JS

Principles

When you first time click on Customization JS, a JavaScript file skeleton is generated. Please consult XTagManager API to get all details about the way to use it, but also about the powerful helpers proposed for inline JavaScript in Configuration NAME columns.

Libraries

XTagManager API uses a set of libraries. You can create your own ones, and include them in the Customization JS as following:

/*#include std_doc.js*/

Inclusions are recursive, so that you can include a library in a library included in a library... finally included in the Customization JS.

By default, a Library is searched in the same folder than Customization JS, and if they don’t exist, in the Release Path or the Debug Path, depending on Minify activation (checked=Release).

When Minify is checked and a library is only present in Debug Path, the Debug version is used and minified on the fly. Libraries taken from Release Path are supposed to be already minified.

Tips & Tricks

Perimeters
Two Steps Registration Forms

Use Case

A registration form is made of two steps (register, success) without URL change, just an Ajax refresh. Both must be distinguished with two different page names.

Solution

In Customization JS, use stat_trigger.init for these pages (if not already done for all pages), and use the fnChanged parameter with a function spying a content no longer present or visible in the second step. Fall back into stat_trigger.urlChanged in any other case:

stat_trigger.init(null,

function()

{

if (window.location.pathname==='/identity/userregistrationwork' && !stat_trigger.regdone)

{

stat_trigger.regdone=!document.querySelector('div.uniqueID-txt');

return stat_trigger.regdone;

}

if (window.location.pathname==='/identity/IDMSSetPassword' && !stat_trigger.pwddone)

{

stat_trigger.pwddone=!document.getElementById('intPwdId');

return stat_trigger.pwddone;

}

return stat_trigger.urlChanged();

}

);

(function(){addPageEvent(document,'DOMContentLoaded',function(){pageStatInjection();});})();

Then, in Perimeters, differentiate both steps with this status:

PATH ROOT | LEVEL 2 | PAGE NAME, EXCLUSION OR PATTERN
/userregistrationwork | 115 | userregistrationwork<js:(stat_trigger.regdone?'-success':'')>
/idp | 115 |
/IDMSSetPassword | 115 | IDMSSetPassword<js:(stat_trigger.pwddone? '-success':'')>
* | 115 |

Clicks & Events
Load Synchronization

Use Case

Some CTAs are still not available once page Load event triggered, so that they are missed by injection process.

Solution

In Customization JS, call stat_link.waitRefresh in activateOnLoad, and when they are too much delayed, do it from stat_trigger.doWhen (based on loader nodes presence).

this.activateOnLoad = function(){

if (window.location.pathname.indexOf('/products/')>0) {

var fnLoader=function(){

var a=document.querySelectorAll('.pd-tabs__preloader');

return (a&&a.length>0);

};

stat_trigger.doWhen(function(){stat_link.waitRefresh('a,button');},

function(){return !fnLoader();},

fnLoader);

}

else {

stat_link.waitRefresh('a,button');

}

};

Search

Mirroring JS

Principles

When you first time click on Mirroring JS, a JavaScript file skeleton is generated. Please consult GA Plugin namespace to get all details about the way to use it, but also about the powerful helpers proposed to enrich the Mirroring accordingly to your needs.

Libraries

By default, the generated Mirroring JS includes the GA Plugin and proposes some entry points to define your mirroring specificities. If you want applying them to several Configurations, copy this JS file in the Debug Path of your installation, give it a generic name, then use it by inclusion in your Customization JS:

/*#include std_ga.js*/


Server Setup

Amazon AWS

Purpose

Amazon cloud is the cheapest and the most efficient option to publish your Configurations, thanks to their convenient S3 Bucket offer.

There’s no need to be a cloud expert to do so, you just have to follow the provided guidelines below: once your account created, this can be achieved in less than 15mn.

AWS Account

You first need to Create and Activate your AWS account. Note that billing method will be required, so you probably have to involve the purchase services of your company.

If your company already uses AWS, ask your infrastructure team to take care of subsequent steps, then to provide you the necessary credentials on the created bucket.

S3 Bucket

Creation

Once your AWS account created and activated, you can Create an Amazon S3 Bucket that will be your owned publication platform.

Once done, use the obtained Host and Bucket to populate the corresponding fields in S3 User Options.

Credentials

If you are the root user of your AWS account, the best practice is first creating a dedicated user for publication.

Once done, use the obtained Key ID and Key Secret to populate the corresponding fields in S3 User Options.

CloudFront Distribution

To improve performances, it’s better using a Content Delivery Network, that will distribute your Configurations in servers close to end-users, all over the world.

To take benefit of this, you need do so, you need to Create a CloudFront distribution.


Changelog

What’s new?

Version 12.40

September 15th, 2019

Checkmark Settings | New Settings File management (no visible improvements, for future Profile Manager).
Checkmark Includes | Includes Manager (beta)

Version 12.30

September 1th, 2019

Checkmark Git Automation | Git Pull at open time (beta).
Checkmark Lookup Tables | Automated map sorting at Publication time.

Version 12.20

August 25th, 2019

Checkmark Git Automation | Automate Clone at first open, and Commit when Publish. Allows intermediates Commit.
Checkmark Versions | Records all Commits and Publish in a dedicated worksheet.

Version 12.10

August 18th, 2019

Checkmark Sites Manager | List, New, Copy, Update, Share.
Checkmark Secured Servers | Automate generation of Secured Servers mapping.
Checkmark Version incrementor | Automate version number incrementation based on Library version and previous publish.

Version 12.00

August 11th, 2019

Checkmark Launcher | XTagConfigurator.exe becomes mandatory to open existing Configurations.
Checkmark Configuration Manager | New, Open, Update, Scan, Share (without manual handling).
Checkmark Publisher batch | Allow publishing a multi selection of Configurations.

What’s next?

November 2019

· Git Pull at open time (final version).

· Include Manager (final version).

· Lookup Tables Dialog for creation and management.

· Certified Installation Package.

· Definition Wizard: Naming helper for Pages and Clicks (Configurator).

· SmartTag First/Third Party Cookie Controller (Configurator).

· Miscellaneous SmartTag options.

· Modular Publisher, to allow any CDN and Publication target (Configurator).

· Profile Manager: allows switching between different Publication profiles (Configurator).

December 2019

· GA Mirroring: Level 2 Names automatically used as Content Group default “Section” (Configurator + Library).

· Component Manager: a new way to accelerate even more the Configuration by identifying Components and manage their naming with common rules (Configurator).

· CSP eval compliance: JS eval replacement by generated code (Configurator + Library).

· DemandBase as a plugin instead of “Specific” (Configurator + Library).

· OnSite Ads Manager (Configurator + Library).

· Master Configuration improvement (Configurator).

January 2020

· GDPR Opted-in in Third-Party (Configurator + Library).

· Import XTag AT Internet Copy as Test Cases

· S3 Version Storage, for users without Git (Configurator).