AMP

amp-experiment

Description

Used to conduct user experience experiments on AMP pages.

 

Required Scripts

<script async custom-element="amp-experiment" src="https://cdn.ampproject.org/v0/amp-experiment-1.0.js"></script>

Usage

Use the amp-experiment component to conduct user experience experiments, such as A/B testing and multivariate testing, and collect corresponding data.

<amp-experiment> provides hooks to define customizable variants and allocates traffic to each of the variants based on the configuration. For each page view, the variant allocation is also exposed to amp-pixel and amp-analytics so that the necessary data can be collected to perform statistical comparison across variants.

A user-sticky variant assignment is supported to provide a consistent user experience to the same client. This functionality relies upon AMP’s Client ID capability to provide random values that are consistent across page views. Please be aware that usage of this feature with this behavior might require updating your privacy policy, or obtaining end user consent in some jurisdictions. (If this is relevant for you, please see consentNotificationId below.)

Multiple experiments can be run on the same AMP document in parallel with their own sets of variants. In user sticky mode, the allocations are orthogonal among different experiments, meaning there will be no correlation between 2 variants (user groups) that are from different experiments.

Configuration

The configuration of the experiments is specified in a JSON object.

<amp-experiment>
  <script type="application/json">
    {
      "aExperiment": {
        "sticky": true,
        "consentNotificationId": "consent-notif",
        "variants": {
          "treatment1": 12.5,
          "treatment2": 12.5,
          "treatment3": 25.0
        }
      },
      "bExperiment": {...}
    }
  </script>
</amp-experiment>

At top level, the JSON is a map of experiment configurations keyed by experiment names. In each experiment, available settings are described in the table below:

Name Is required field? Description
sticky No, default=true Whether the experiment assignment is sticky for a user or not.
consentNotificationId No, default=undefined The element ID of the amp-user-notification to be dismissed before a sticky experiment can be conducted. To not block the page rendering, an experiment with this field specified will be skipped if the consent is not provided prior to the current visit. That’s to say, only returning visits with user consent can trigger such an experiment. This setting is only relevant when sticky=true.
variants Yes A name-to-percentage map where percentage is a float number that is greater than 0 and less than 100 that indicates the amount of traffic will be allocated to the variant. Variants don’t have to sum up to 100%. In that case, there will be a portion of the traffic allocated to a variant named none, which is a reserved keyword that indicates no variant was allocated.
Advanced settings
cidScope No, default=amp-experiment The CID scope for user sticky experiment. Only useful when you want to reuse an existing CID. This setting is only relevant when sticky=true.
group No, default={experimentName} Experiments with the same group name will share the same CID space. Only useful when multiple experiments want to have correlated user grouping. This setting is only relevant when sticky=true.

Characters used in the experiment name and variant name are restricted to [a-z,A-Z,0-9,-,_]. none is a reserved keyword and cannot be used.

Analytics

Allocated variants are available as a URL substitution variable: VARIANT(experiment)

<amp-pixel
  src="https://example.com?xname=aExperiment&xvar=VARIANT(aExperiment)"
></amp-pixel>

For experiments with no variants allocated, this variable resolves to string literal none.

Variable VARIANTS returns all variants serialized in the format of

{experiment1}.{variant}!{experiment2}.{variant}...

For example, the URL https://example.com?variants=VARIANTS expands to:

https://example.com?variants=aExperiment.treatmentA!bExperiment.treatmentB

Override variant allocation

An experiment can be forced to a variant via URL fragment. This is useful in development.

https://example.com/amparticle#amp-x-experiment=treatment

Notice the same amp-x- prefix used as in body attributes.

Styling

Style a variant

For each experiment, the allocated variant is exposed as attribute of the body element of the document.

<body amp-x-aExperiment="treatment1" amp-x-bExperiment="treatment3"></body>

Notice that the experiment name is prefixed by amp-x- to avoid naming conflict. Experiments with no variant allocated are ignored.

Use CSS attribute selector to style the document. For example, the code below hide a test banner for the treatment1 group of experiment aExperiment:

body[amp-x-aExperiment='treatment1'] .test-banner {
  display: none;
}

Validation

One AMP document can have at most one amp-experiment element. See amp-experiment rules in the AMP validator specification.

도움이 더 필요하신가요?

이 문서를 수십 번 읽었음에도 여전히 궁금한 점이 남아 있나요? 다른 개발자들도 같은 심정일지 모릅니다. Stack Overflow에서 소통해 보세요.

Stack Overflow로 이동
버그나 누락된 기능을 발견하셨나요?

AMP 프로젝트는 여러분의 참여와 기여를 적극 환영합니다! 오픈 소스 커뮤니티를 통해 지속적으로 활동해 주셔도 좋지만 관심 있는 주제에 한 번만 기여하셔도 큰 도움이 됩니다.

GitHub로 이동하기