CrUX API

CrUX API обеспечивает быстрый доступ к агрегированным данным об удобстве использования страниц и источников реальными пользователями.

Попробовать

Пример использования

CrUX API позволяет запрашивать показатели удобства использования для определенного URI, например "Получить показатели для источника https://example.com".

Ключ CrUX API

Чтобы использовать CrUX API, нужен ключ Google Cloud API, подготовленный для использования Chrome UX Report API.

Получение и использование ключа API

Получить ключ

Ключ также можно создать на странице Учетные данные.

Если у вас есть ключ API, ваше приложение может добавлять параметр запроса key=yourAPIKey ко всем URL-адресам запросов.

Ключ API можно встраивать в URL в исходном виде (без кодирования).

См. примеры запросов.

Модель данных

В этом разделе подробно описана структура данных в запросах и ответах.

Запись

Отдельный фрагмент информации о странице или сайте. Запись может содержать данные, относящиеся к определенному идентификатору и определенной комбинации параметров. Запись может содержать данные для одного или нескольких показателей.

Идентификаторы

Идентификаторы указывают, какие записи нужно найти. В CrUX это веб-страницы и сайты.

Происхождение

Если идентификатором является источник, все данные, представленные для всех страниц в этом источнике, агрегируются вместе. Например, предположим, что у источника http://www.example.com есть страницы, указанные в этом файле Sitemap:

http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html

Это означает, что при запросе к Chrome UX Report с источником http://www.example.com будут возвращены агрегированные данные для http://www.example.com/, http://www.example.com/foo.html и http://www.example.com/bar.html, поскольку все эти страницы относятся к указанному источнику.

URL

Если идентификатор – это URL, будут возвращены данные только для этого URL. Вернемся к файлу Sitemap для домена http://www.example.com:

http://www.example.com/
http://www.example.com/foo.html
http://www.example.com/bar.html

Если в качестве идентификатора задан URL со значением http://www.example.com/foo.html, будут возвращены данные только для этой страницы.

Размеры

Параметры определяют группу данных, по которой агрегируется запись. Например, значение PHONE в параметре "Форм-фактор" указывает, что запись содержит информацию о загрузках, которые выполнялись на мобильном устройстве. У каждого параметра будет определенное количество значений. Если параметр не указан, это означает, что он агрегирован по всем значениям. Например, если тип устройства не указан, то запись содержит информацию о загрузках, которые выполнялись на устройствах любого типа.

Тип устройства

Класс устройства, с помощью которого конечный пользователь перешел на страницу. Общий класс устройств, разделенный на категории PHONE, TABLET и DESKTOP.

Показатель

Отчетные показатели представлены в виде статистических агрегаций, гистограмм, процентилей и долей.

Значения с плавающей запятой округляются до четырех десятичных знаков. Обратите внимание, что показатели cumulative_layout_shift представляют собой числа двойной точности, закодированные в виде строки, поэтому они не считаются значениями с плавающей запятой и в строке указываются с двумя десятичными знаками.

Гистограмма

На гистограмме показано, какой процент загрузок страниц попадает в определенные диапазоны для этого показателя.

Гистограмма с тремя интервалами для примера показателя выглядит следующим образом:

{
  "histogram": [
    {
      "start": 0,
      "end": 1000,
      "density": 0.3818
    },
    {
      "start": 1000,
      "end": 3000,
      "density": 0.4991
    },
    {
      "start": 3000,
      "density": 0.1192
    }
  ]
}

Эти данные указывают на то, что в 38,18 % случаев загрузки страницы значение показателя находилось в диапазоне от 0 до 1000 мс. Единицы измерения показателя не содержатся в этой гистограмме, в данном случае мы будем предполагать миллисекунды.

Кроме того, в 49,91 % случаев загрузки страницы значение показателя составляло от 1000 до 3000 мс, а в 11,92 % случаев – более 3000 мс.

Процентили

Показатели также могут содержать процентили, которые могут быть полезны для дополнительного анализа. Мы сообщаем значения показателей для определенного процентиля. Они рассчитываются на основе полного набора доступных данных, а не окончательных данных, разбитых по интервалам, поэтому могут не совпадать с интерполированным процентилем, рассчитанным на основе окончательной гистограммы с интервалами.

{
  "percentiles": {
    "p75": 2063
  }
}

В этом примере не менее 75 % загрузок страниц были измерены со значением показателя <= 2063.

Дроби

Доли указывают на процент загрузок страниц, которые могут быть помечены определенным образом. В этом случае значениями показателей являются эти ярлыки.

Например, показатель form_factors состоит из объекта fractions, в котором перечислены типы устройств, охваченные данным запросом:

"form_factors": {
  "fractions": {
    "desktop": 0.0377,
    "tablet": 0.0288,
    "phone": 0.9335
  }
}

В этом случае 3,77 % загрузок страниц было зарегистрировано на компьютерах, 2,88 % – на планшетах и 93,35 % – на телефонах, что в сумме дает 100 %.

Типы значений показателей

Название показателя CrUX API Тип данных Метрические единицы Статистические агрегации Документация
cumulative_layout_shift Число с плавающей запятой двойной точности с двумя знаками после запятой, закодированное как строка без единиц измерения гистограмма с тремя интервалами, процентили с p75 CLS
interaction_to_next_paint int milliseconds гистограмма с тремя интервалами, процентили с p75 INP
largest_contentful_paint int milliseconds гистограмма с тремя интервалами, процентили с p75 LCP
experimental_cumulative_layout_shift_with_softnavs Число с плавающей запятой двойной точности с двумя знаками после запятой, закодированное как строка без единиц измерения гистограмма с тремя интервалами, процентили с p75 Блог
experimental_interaction_to_next_paint_with_softnavs int milliseconds гистограмма с тремя интервалами, процентили с p75 Блог
experimental_largest_contentful_paint_with_softnavs int milliseconds гистограмма с тремя интервалами, процентили с p75 Блог
first_contentful_paint int milliseconds гистограмма с тремя интервалами, процентили с p75 FCP
experimental_first_contentful_paint_with_softnavs int milliseconds гистограмма с тремя интервалами, процентили с p75 Блог
experimental_time_to_first_byte int milliseconds гистограмма с тремя интервалами, процентили с p75 TTFB
form_factors Число с плавающей запятой двойной точности и четырьмя десятичными знаками % сопоставление типа устройства с долей Типы устройств
navigation_types Число с плавающей запятой двойной точности и четырьмя десятичными знаками % сопоставление типа навигации с долей Типы навигации
experimental_navigation_types_with_softnavs Число с плавающей запятой двойной точности и четырьмя десятичными знаками % сопоставление типа навигации с долей Блог
round_trip_time int milliseconds гистограмма с тремя интервалами, процентили с p75 Показатель RTT
largest_contentful_paint_resource_type Число с плавающей запятой двойной точности и четырьмя десятичными знаками % сопоставление типа навигации с долей Типы ресурсов, которые могут быть элементом LCP
largest_contentful_paint_image_time_to_first_byte int milliseconds процентилями с p75 Составные части LCP
largest_contentful_paint_image_resource_load_delay int milliseconds процентилями с p75 Составные части LCP
largest_contentful_paint_image_resource_load_duration int milliseconds процентилями с p75 Составные части LCP
largest_contentful_paint_image_element_render_delay int milliseconds процентилями с p75 Составные части LCP
experimental_ad_count Число с плавающей запятой и двумя десятичными знаками без единиц измерения Только 75-й процентиль Количество объявлений
experimental_ad_density Число с плавающей запятой и двумя десятичными знаками без единиц измерения Только 75-й процентиль Плотность рекламы
experimental_ad_cpu int milliseconds Только 75-й процентиль Вес объявления: ЦП
experimental_ad_kilobytes int КБ Только 75-й процентиль Вес объявления: сеть

Сопоставление названий показателей BigQuery

Название показателя CrUX API Название показателя BigQuery
cumulative_layout_shift layout_instability.cumulative_layout_shift
first_contentful_paint first_contentful_paint
interaction_to_next_paint interaction_to_next_paint
largest_contentful_paint largest_contentful_paint
experimental_time_to_first_byte experimental.time_to_first_byte
experimental_cumulative_layout_shift_with_softnavs experimental.cumulative_layout_shift_with_softnavs
experimental_first_contentful_paint_with_softnavs n/a
experimental_interaction_to_next_paint_with_softnavs experimental.interaction_to_next_paint_with_softnavs
experimental_largest_contentful_paint_with_softnavs experimental.largest_contentful_paint_with_softnavs
navigation_types navigation_types
experimental_navigation_types_with_softnavs n/a
form_factors –
round_trip_time round_trip_time
largest_contentful_paint_resource_type –
largest_contentful_paint_image_time_to_first_byte –
largest_contentful_paint_image_resource_load_delay –
largest_contentful_paint_image_resource_load_duration –
largest_contentful_paint_image_element_render_delay –
experimental_ad_count n/a
experimental_ad_density n/a
experimental_ad_cpu n/a
experimental_ad_kilobytes n/a

Период, за который собраны данные

С октября 2022 г. CrUX API содержит объект collectionPeriod с полями firstDate и endDate, которые представляют даты начала и окончания периода агрегирования. Пример:

    "collectionPeriod": {
      "firstDate": {
        "year": 2022,
        "month": 9,
        "day": 12
      },
      "lastDate": {
        "year": 2022,
        "month": 10,
        "day": 9
      }
    }

Это позволяет лучше понять данные и определить, были ли они обновлены за этот день или возвращают те же данные, что и вчера.

Период сбора данных также доступен в PageSpeed Insights:

В подсказке PageSpeed Insights отображаются даты периода сбора данных.
Даты периода сбора данных в PageSpeed Insights.

Кроме того, в collectionPeriod всегда будет указано 28 дней, даже если данные собраны за меньший период (например, если страница была запущена менее 28 дней назад). collectionPeriod – это период времени, за который были агрегированы данные CrUX, а не период времени, который они представляют.

Примеры запросов

Запросы отправляются в виде объектов JSON с помощью запроса POST к https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=[YOUR_API_KEY]" с данными запроса в виде объекта JSON в теле POST:

{
  "origin": "https://example.com",
  "formFactor": "PHONE",
  "metrics": [
    "largest_contentful_paint",
    "experimental_time_to_first_byte"
  ]
}

Например, его можно вызвать из curl с помощью следующей командной строки (замените API_KEY своим ключом):

curl -s --request POST 'https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=API_KEY' \
    --header 'Accept: application/json' \
    --header 'Content-Type: application/json' \
    --data '{"formFactor":"PHONE","origin":"https://www.example.com","metrics":["largest_contentful_paint", "experimental_time_to_first_byte"]}'

Данные на уровне страницы можно получить через API, передав в запросе свойство url вместо origin:

{
  "url": "https://example.com/page",
  "formFactor": "PHONE",
  "metrics": [
    "largest_contentful_paint",
    "experimental_time_to_first_byte"
  ]
}

Если свойство metrics не задано, будут возвращены все доступные показатели:

Если значение formFactor не указано, то будут агрегированы значения для всех типов устройств.

Дополнительные примеры запросов можно найти в статье Как использовать Chrome UX Report API.

Конвейер данных

Прежде чем стать доступным через API, набор данных CrUX проходит через конвейер, где данные консолидируются, агрегируются и фильтруются.

Скользящее среднее

В отчете Chrome UX Report представлены скользящие средние значения агрегированных показателей за 28 дней. Это означает, что в отчете Chrome UX Report за любой период времени представлены агрегированные данные за последние 28 дней.

Аналогичным образом ежемесячные отчеты агрегируются в наборе данных CrUX в BigQuery.

Обновляется ежедневно

Данные обновляются ежедневно примерно в 04:00 по всемирному координированному времени (UTC). Соглашение об уровне обслуживания не предусматривает определенного времени обновления. Оно выполняется ежедневно по мере возможности.

Схема

Для CrUX API есть одна конечная точка, которая принимает HTTP-запросы POST. API возвращает объект record, который содержит один или несколько объектов metrics с данными об эффективности запрошенного источника или страницы.

HTTP-запрос

POST https://chromeuxreport.googleapis.com/v1/records:queryRecord

URL имеет синтаксис gRPC Transcoding.

Тело запроса

Ниже приведена структура данных в теле запроса.

{
  "formFactor": enum (FormFactor),
  "metrics": [
    string
  ],

  // Union field url_pattern can be only one of the following:
  "origin": string,
  "url": string
  // End of list of possible types for union field url_pattern.
}
Поля
formFactor

enum (FormFactor)

Форм-фактор – это параметр запроса, который указывает класс устройства, к которому должны относиться данные записи.

В этом поле используются значения DESKTOP, PHONE или TABLET.

Примечание. Если тип устройства не указан, будет возвращена специальная запись с агрегированными данными по всем типам устройств.

metrics[]

string

Показатели, которые должны быть включены в ответ. Если не указать ни одного, будут возвращены все найденные показатели.

Допустимые значения: ["cumulative_layout_shift", "first_contentful_paint", "interaction_to_next_paint", "largest_contentful_paint", "experimental_cumulative_layout_shift_with_softnavs", "experimental_first_contentful_paint_with_softnavs", "experimental_interaction_to_next_paint_with_softnavs", "experimental_largest_contentful_paint_with_softnavs", "experimental_time_to_first_byte", "experimental_navigation_types_with_softnavs", "largest_contentful_paint_resource_type", "largest_contentful_paint_image_time_to_first_byte", "largest_contentful_paint_image_resource_load_delay", "largest_contentful_paint_image_resource_load_duration", "largest_contentful_paint_image_element_render_delay", "navigation_types", "round_trip_time", "experimental_ad_count", "experimental_ad_density", "experimental_ad_cpu", "experimental_ad_kilobytes"].

Объединенное поле url_pattern. url_pattern – основной идентификатор для поиска записи. Допустимы следующие значения:
origin

string

url_pattern "Источник" – это шаблон URL, который является источником сайта.

Примеры: "https://example.com", "https://cloud.google.com".

url

string

url_pattern url – это шаблон URL, который может быть любым URL.

Примеры: "https://example.com/, https://cloud.google.com/why-google-cloud/".

Например, чтобы запросить значения отрисовки самого крупного контента на компьютере для главной страницы документации для разработчиков Chrome, используйте следующий запрос:

{
  "url": "https://developer.chrome.com/docs/",
  "formFactor": "DESKTOP",
  "metrics": [
    "largest_contentful_paint"
  ]
}

Тело ответа

В ответ на успешные запросы возвращаются ответы с объектом record и urlNormalizationDetails в следующей структуре:

{
  "record": {
    "key": {
      object (Key)
    },
    "metrics": [
      string: {
        object (Metric)
      }
    ]
  },
  "urlNormalizationDetails": {
    object (UrlNormalization)
  }
}

Например, ответ на тело запроса из предыдущего примера может быть таким:

{
  "record": {
    "key": {
      "formFactor": "DESKTOP",
      "url": "https://developer.chrome.com/docs/"
    },
    "metrics": {
      "largest_contentful_paint": {
        "histogram": [
          {
            "start": 0,
            "end": 2500,
            "density": 0.9815
          },
          {
            "start": 2500,
            "end": 4000,
            "density": 0.0108
          },
          {
            "start": 4000,
            "density": 0.0077
          }
        ],
        "percentiles": {
          "p75": 651
        }
      }
    },
    "collectionPeriod": {
      "firstDate": {
        "year": 2022,
        "month": 9,
        "day": 12
      },
      "lastDate": {
        "year": 2022,
        "month": 10,
        "day": 9
      }
    }
  }
}

Ключ

Key определяет все параметры, которые делают эту запись уникальной.

{
  "formFactor": enum (FormFactor),

  // Union field url_pattern can be only one of the following:
  "origin": string,
  "url": string
  // End of list of possible types for union field url_pattern.
}
Поля
formFactor

enum (FormFactor)

Форм-фактор – это класс устройств, с которых пользователи заходили на сайт.

Если тип устройства не указан, будут возвращены агрегированные данные по всем типам устройств.

Объединенное поле url_pattern. Шаблон URL – это URL, к которому применяется запись. url_pattern может иметь одно из следующих значений:
origin

string

origin указывает источник, к которому относится эта запись.

Примечание. Если указать origin, данные о загрузках всех страниц этого источника будут агрегированы в данные об удобстве использования на уровне источника.

url

string

url указывает URL, к которому относится запись.

Примечание. Если вы укажете url, будут агрегированы только данные по этому URL.

Показатели

metric – это набор агрегированных данных об удобстве использования, относящихся к одному показателю эффективности сайта, например первой отрисовке контента. Они могут содержать сводную гистограмму реального использования Chrome в виде серии bins, данные по определенным процентилям (например, p75) или помеченные доли.

{
  "histogram": [
    {
      object (Bin)
    }
  ],
  "percentiles": {
    object (Percentiles)
  }
}

или

{
  "fractions": {
    object (Fractions)
  }
}
Поля
histogram[]

object (Bin)

Гистограмма пользовательского опыта для показателя. Гистограмма будет иметь по крайней мере один интервал, а плотности всех интервалов в сумме составят ~1.

percentiles

object (Percentiles)

Часто используемые процентили показателя. Тип значения для процентилей будет таким же, как и для интервалов гистограммы.

fractions

object (Fractions)

Этот объект содержит доли с метками, которые в сумме составляют примерно 1.

Дробные значения округляются до четырех знаков после запятой.

Корзина

bin – это дискретная часть данных, охватывающая период от начала до конца или, если конец не указан, от начала до положительной бесконечности.

Начальное и конечное значения интервала указываются в типе значения показателя, который он представляет. Например, первая отрисовка контента измеряется в миллисекундах и выражается целыми числами, поэтому в ее сегментах для начального и конечного типов будут использоваться значения int32. Однако совокупный сдвиг макета измеряется в безразмерных десятичных дробях и представляется в виде десятичной дроби, закодированной как строка, поэтому в его сегментах метрик в качестве типа значения будут использоваться строки.

{
  "start": value,
  "end": value,
  "density": number
}
Поля
start

(integer | string)

"Начало" – это начало интервала данных.

end

(integer | string)

End – конец диапазона данных. Если значение end не указано, то у интервала нет конца и он действителен от start до +inf.

density

number

Доля пользователей, у которых значение показателя попало в этот интервал.

Плотность округляется до четырех знаков после запятой.

Процентили

Percentiles содержит синтетические значения показателя в заданном статистическом процентиле. Они используются для оценки значения показателя, с которым сталкивается определенный процент пользователей от общего числа.

{
  "P75": value
}
Поля
p75

(integer | string)

75 % загрузок страниц имели значение показателя, равное указанному или меньшее.

Дроби

Fractions содержит доли с ярлыками, которые в сумме дают примерно 1. Каждый ярлык описывает загрузку страницы, поэтому показатели, представленные таким образом, можно рассматривать как отдельные значения, а не числовые значения, а доли выражают, как часто измерялось определенное значение.

{
  "label_1": fraction,
  "label_2": fraction,
  ...
  "label_n": fraction
}

Как и значения плотности в интервалах гистограммы, каждое значение fraction – это число 0.0 <= value <= 1.0, а их сумма составляет примерно 1,0.

UrlNormalization

Объект, представляющий действия по нормализации URL, которые выполняются, чтобы повысить вероятность успешного поиска. Это базовые автоматические изменения, которые вносятся, когда известно, что поиск по указанному значению url_pattern не даст результатов. Сложные действия, такие как переадресация, не выполняются.

{
  "originalUrl": string,
  "normalizedUrl": string
}
Поля
originalUrl

string

Исходный URL запроса до выполнения каких-либо действий по нормализации.

normalizedUrl

string

URL после нормализации. Это действительный URL, который можно найти в отчете об удобстве пользования.

Ограничение частоты запросов

CrUX API позволяет бесплатно выполнять до 150 запросов в минуту на облачный проект Google Cloud. Этот лимит и текущее использование можно посмотреть в консоли Google Cloud. Этого должно быть достаточно для большинства случаев. Увеличить квоту за плату нельзя.