diff --git a/extensions/amp-analytics/amp-analytics.md b/extensions/amp-analytics/amp-analytics.md
index fb2e7d25e0bb..275b622c3ff4 100644
--- a/extensions/amp-analytics/amp-analytics.md
+++ b/extensions/amp-analytics/amp-analytics.md
@@ -14,11 +14,11 @@ See the License for the specific language governing permissions and
limitations under the License.
-->
-# `amp-analytics`
+### `amp-analytics`
Capture analytics data from an AMP document.
-## Behavior
+#### Behavior
The `` element is used to measure activity on an AMP document. The details concerning what is measured and how
that data is sent to an analytics server is specified in a JSON configuration object.
@@ -57,37 +57,38 @@ when the document is first loaded, and each time an `` tag is clicked:
```
-## Attributes
+#### Attributes
- - `type` This optional attribute can be specified to use one of the built-in analytics providers. Currently supported values for type are:
+ - `type` Optional attribute. This attribute can be used to inherit configuration from one of the built-in analytics providers. Currently supported values for type are:
- `chartbeat`: Adds support for Chartbeat. More details for adding Chartbeat support can be found at [support.chartbeat.com](http://support.chartbeat.com/docs/).
- - `comscore`: Supports comScore Unified Digital Measurementâ„¢ pageview analytics. Requires defining *var* `c2` with comScore-provided *c2 id*.
+ - `comscore`: Adds support for comScore Unified Digital Measurementâ„¢ pageview analytics. Requires defining *var* `c2` with comScore-provided *c2 id*.
- `googleanalytics`: Adds support for Google Analytics. More details for adding Google Analytics support can be found at [developers.google.com](https://developers.google.com/analytics/devguides/collection/amp-analytics/).
+
+ Here's an example of usage of `type` for a provider called XYZ:
```
...
```
- - `config` This attribute can be used to load a configuration from a specified remote URL. The URL specified here should use https scheme. See also `data-include-credentials` attribute below.
+ - `config` Optional attribute. This attribute can be used to load a configuration from a specified remote URL. The URL specified here should use https scheme. See also `data-include-credentials` attribute below.
```
```
The response must follow the [AMP CORS security guidelines](../../spec/amp-cors-requests.md).
- - `data-credentials` Optional. If set to `include` turns on the ability to read and write cookies on the request specified via `config` above.
- - `data-consent-notification-id` Optional attribute. If provided will stop
- processing the analytics request until a [amp-user-notification](../../extensions/amp-user-notification/amp-user-notification.md) with
- the given HTML-id was confirmed by the user.
+ - `data-credentials` Optional attribute. If set to `include` turns on the ability to read and write cookies on the request specified via `config` above.
+ - `data-consent-notification-id` Optional attribute. If provided, the page will not process analytics requests until an [amp-user-notification](../../extensions/amp-user-notification/amp-user-notification.md) with
+ the given HTML element id is confirmed (accepted) by the user.
-## Configuration
+#### Configuration
Configuration may be specified inline (as shown in the example above) or fetched remotely by specifying a URL in the
`config` attribute. Additionally, built-in configuration for popular analytics vendors can be selected using
the `type` attribute.
-If configuration data from more than one of these sources is used, the configuration objects(vars, requests and triggers) will
-be merged together such that remote configuration takes precedence over inline configuration, and inline configuration
-takes precendence over vendor configuration.
+If configuration data from more than one of these sources is used, the configuration objects (vars, requests and triggers) will
+be merged together such that **(i) remote configuration takes precedence over inline configuration and (ii) inline configuration
+takes precendence over vendor configuration**.
The `` configuration object uses the following format:
@@ -112,7 +113,7 @@ The `` configuration object uses the following format:
}
}
```
-### Requests
+##### Requests
The `requests` attribute specifies the URLs used to transmit data to an analytics platform. The `request-name` is used
in the trigger configuration to specify what request should be sent in response to a pariticular event. The `request-value`
is an https URL. These values may include placeholder tokens that can reference other requests or variables.
@@ -125,8 +126,8 @@ is an https URL. These values may include placeholder tokens that can reference
}
```
-### Vars
-`amp-analytics` defines many basic variables that can be used in requests. A list of all such variables is available [here](./analytics-vars.md). In addition, all the variables supported by [AMP HTML URL Variable Substitutions](../../spec/amp-var-substitutions.md) are also supported.
+##### Vars
+`amp-analytics` defines many basic variables that can be used in requests. A list of all such variables is available in the [`amp-analytics` Variables Guide](./analytics-vars.md). In addition, all of the variables supported by [AMP HTML Substitutions Guide](../../spec/amp-var-substitutions.md) are also supported.
The `vars` attribute in the configuration can be used to define new key-value pairs or override existing variables that can be referenced in `request` values. New variables are commonly used to specify publisher specific information.
@@ -137,56 +138,85 @@ The `vars` attribute in the configuration can be used to define new key-value pa
}
```
-### Triggers
+##### Triggers
The `triggers` attribute describes when an analytics request should be sent. It contains a key-value pair of trigger-name and
trigger-configuration. Trigger name can be any string comprised of alphanumeric characters (a-zA-Z0-9). Triggers from a
configuration with lower precedence are overridden by triggers with the same names from a configuration with higher precedence.
- - `on` (required) The event to listener for. Valid values are `visible`,`click`, and `timer`.
+ - `on` (required) The event to listener for. Valid values are `click`, `scroll`, `timer`, and `visible`.
- `request` (required) Name of the request to send (as specified in the `requests` section).
- `vars` An object containing key-value pairs used to override `vars` defined in the top level config, or to specify
vars unique to this trigger.
+ - `selector` (required when `on` is set to `click`) This configuration is used on conjunction with the `click` trigger. Please see below for details.
+ - `scrollSpec` (required when `on` is set to `scroll`) This configuration is used on conjunction with the `scroll` trigger. Please see below for details.
+ - `timerSpec` (required when `on` is set to `timer`) This configuration is used on conjunction with the `timer` trigger. Please see below for details.
-Following configuration only applies to specific values of `on`.
- - `selector` A CSS selector used to refine which elements should be tracked. Use value `*` to track all elements. Used in triggers where `on` is set to `click`.
- - `scrollSpec` An object used when `on` is set to `scroll`. This object can contain `verticalBoundaries` and `horizontalBoundaries`. At least one of the two property is required for scroll event to fire. The values for both the properties should be arrays of numbers containing the boundaries on which a scroll event is generated. For instance, in the following code snippet, the scroll event will be fired when page is scrolled vertically by 25%, 50% and 90%. Additionally, the event will also fire when the page is horizontally scrolled to 90% of scroll width.
- - `timerSpec` Specification for triggers of type `timer`. The timer will trigger immediately and then at a specified interval thereafter.
- - `interval` Length of the timer interval, in seconds.
- - `maxTimerLength` Maximum duration for which the timer will fire, in seconds.
+###### Page visible trigger (`"on": "visible"`)
+Use this configuration to fire a request when the page becomes visible. No further configuration is required.
```javascript
"triggers": {
"defaultPageview": {
"on": "visible",
"request": "pageview"
- },
- "anchorClicks": {
- "on": "click",
- "selector": "a",
- "request": "event",
- "vars": {
- "eventId": 128
- }
- },
- "pageTimer": {
- "on": "timer",
- "timerSpec": {
- "interval": 10,
- "maxTimerLength": 600
- },
- "request": "pagetime"
- },
- "scrollPings": {
- "on": "scroll",
- "scrollSpec": {
- "verticalBoundaries": [25, 50, 90],
- "horizontalBoundaries": [90]
- }
}
}
```
-### Transport
+###### Click trigger (`"on": "click"`)
+Use this configuration to fire a request when a specified element is clicked. Use `selector` to control which elements will cause this request to fire:
+ - `selector` A CSS selector used to refine which elements should be tracked. Use value `*` to track all elements.
+
+ ```javascript
+ "triggers": {
+ "anchorClicks": {
+ "on": "click",
+ "selector": "a",
+ "request": "event",
+ "vars": {
+ "eventId": 128
+ }
+ }
+ }
+ ```
+
+###### Scroll trigger (`"on": "scroll"`)
+Use this configuration to fire a request under certain conditions when the page is scrolled. Use `scrollSpec` to control when this will fire:
+ - `scrollSpec` This object can contain `verticalBoundaries` and `horizontalBoundaries`. At least one of the two properties is required for a scroll event to fire. The values for both of the properties should be arrays of numbers containing the boundaries on which a scroll event is generated. For instance, in the following code snippet, the scroll event will be fired when page is scrolled vertically by 25%, 50% and 90%. Additionally, the event will also fire when the page is horizontally scrolled to 90% of scroll width.
+
+
+ ```javascript
+ "triggers": {
+ "scrollPings": {
+ "on": "scroll",
+ "scrollSpec": {
+ "verticalBoundaries": [25, 50, 90],
+ "horizontalBoundaries": [90]
+ }
+ }
+ }
+ ```
+
+###### Timer trigger (`"on": "timer"`)
+Use this configuration to fire a request on a regular time interval. Use `timerSpec` to control when this will fire:
+ - `timerSpec` Specification for triggers of type `timer`. The timer will trigger immediately and then at a specified interval thereafter.
+ - `interval` Length of the timer interval, in seconds.
+ - `maxTimerLength` Maximum duration for which the timer will fire, in seconds.
+
+ ```javascript
+ "triggers": {
+ "pageTimer": {
+ "on": "timer",
+ "timerSpec": {
+ "interval": 10,
+ "maxTimerLength": 600
+ },
+ "request": "pagetime"
+ }
+ }
+ ```
+
+##### Transport
The `transport` attribute specifies how to send a request. The value is an object with fields that
indicate which transport methods are acceptable.
@@ -196,7 +226,14 @@ indicate which transport methods are acceptable.
request, with credentials, and an empty body.
- `image` Indicates the request can be sent by generating an `Image` tag. This will send a GET request.
-If more than one of the above transport methods are enabled, the precedence is `beacon` > `xhrpost` > `image`.
-If the client's user agent does not support a method, the next highest precedence method enabled will be used.
-By default, all three methods above are enabled.
+If more than one of the above transport methods are enabled, the precedence is `beacon` > `xhrpost` > `image`. Only one transport method will be used, and it will be the highest precedence one that is permitted and available. If the client's user agent does not support a method, the next highest precedence method enabled will be used. By default, all three methods above are enabled.
+
+In the example below, `beacon` and `xhrpost` are set to `false`, so they will not be used even though they have higher precedence than `image`. `image` would be set `true` by default, but it is explicitly declared here. If the client's user agent supports the `image` method, then it will be used; otherwise, no request would be sent.
+```javascript
+'transport': {
+ 'beacon': false,
+ 'xhrpost': false,
+ 'image': true
+}
+```