4.1.5 Отслеживание конверсий

Ценность и влияние на бизнес


Чтобы эффективно использовать мощные инструменты машинного обучения и аналитики экосистемы Google в рекламных кампаниях ваших клиентов-продавцов, вам необходимо разместить на их сайтах теги отслеживания конверсий и ремаркетинга.

Конверсия в Google Рекламе – это выполнение пользователем определенного действия, после того как он нажмет на объявление, например покупка товара, установка мобильного приложения или подписка на рассылку. Отслеживание конверсий позволяет получать важные данные о действиях пользователей после просмотра объявления или клика по нему, в том числе информацию для расчета и сравнения рентабельности инвестиций (ROI). Это помогает вашим клиентам принимать решения о том, на что направлять расходы на рекламу. Отслеживание также помогает обеспечить доступность данных для сверки. Заказы различаются в зависимости от товара или категории, поэтому отслеживание конверсий также может быть полезно, чтобы показать, как определенные группы товаров конвертируются в продажи.

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

Действия-конверсии по-прежнему используются для отслеживания конверсий и оптимизации кампании. Вы создаете действия-конверсии, а Google объединяет их в цели конверсий.

Действие-конверсия "Покупка"

Реализация отслеживания конверсий, описанная здесь, позволяет аккаунту Google Рекламы вашего продавца измерять количество конверсий-покупок и ценность этих конверсий. Без отслеживания конверсий вы не сможете оценить рентабельность инвестиций в рекламу, то есть ценность, которую кампания приносит бизнесу. Кроме того, он отправляет дополнительные сигналы данных, которые позволяют оптимизировать эффективность кампании.

Другие действия-конверсии

Действие-конверсия "Покупка" является обязательным, но отслеживание дополнительных действий-конверсий может предоставить продавцам полезную информацию. Рекомендуем регистрировать все возможные действия и реализовать как можно больше основных действий-конверсий. Полный список рекомендуемых действий-конверсий приведен в разделе руководства по Tech API.

Рекомендуем вам регистрировать следующие данные:

  • Все успешные события, связанные с ценностью.
  • Успешные события, которые связаны с основными конверсиями, например add_to_cart и sign_up.
  • Взаимодействия с конечными пользователями.

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

Рекомендации по UX


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

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

connect_your_google_ads_account

Технические рекомендации


Ниже описано, как работает отслеживание конверсий. Ниже приведена подробная информация о каждом этапе.

  1. Вы создаете ConversionAction в аккаунте Google Рекламы продавца, чтобы отслеживать покупки (и, при желании, другие действия клиентов) на его сайте.

  2. Добавьте тег или фрагмент кода для действия-конверсии на сайт или в мобильное приложение. Подробнее о том, как настроить отслеживание конверсий на сайте…

  3. Когда пользователь нажимает на объявление, на его компьютере или мобильном устройстве создается временный файл cookie.

  4. Когда клиент выполняет действие, заданное рекламодателем, Google распознает файл cookie (с помощью добавленного фрагмента кода) и регистрирует конверсию вместе с другими параметрами, например ценностью.

Предварительные требования

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

Как создавать и настраивать действия-конверсии

В примерах ниже показано, как создать действие-конверсию и добавить его в аккаунт Google Рекламы. Каждый пример выполняет все фоновые задачи аутентификации и помогает создать действие-конверсию:

Java

// Copyright 2018 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.ads.googleads.examples.remarketing;

import static com.google.ads.googleads.examples.utils.CodeSampleHelper.getPrintableDateTime;

import com.beust.jcommander.Parameter;
import com.google.ads.googleads.examples.utils.ArgumentNames;
import com.google.ads.googleads.examples.utils.CodeSampleParams;
import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.ads.googleads.v25.enums.ConversionActionCategoryEnum.ConversionActionCategory;
import com.google.ads.googleads.v25.enums.ConversionActionStatusEnum.ConversionActionStatus;
import com.google.ads.googleads.v25.enums.ConversionActionTypeEnum.ConversionActionType;
import com.google.ads.googleads.v25.errors.GoogleAdsError;
import com.google.ads.googleads.v25.errors.GoogleAdsException;
import com.google.ads.googleads.v25.resources.ConversionAction;
import com.google.ads.googleads.v25.resources.ConversionAction.ValueSettings;
import com.google.ads.googleads.v25.services.ConversionActionOperation;
import com.google.ads.googleads.v25.services.ConversionActionServiceClient;
import com.google.ads.googleads.v25.services.MutateConversionActionResult;
import com.google.ads.googleads.v25.services.MutateConversionActionsResponse;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;

/** Adds a conversion action. */
public class AddConversionAction {

  private static class AddConversionActionParams extends CodeSampleParams {

    @Parameter(names = ArgumentNames.CUSTOMER_ID, required = true)
    private Long customerId;
  }

  public static void main(String[] args) {
    AddConversionActionParams params = new AddConversionActionParams();
    if (!params.parseArguments(args)) {

      // Either pass the required parameters for this example on the command line, or insert them
      // into the code here. See the parameter class definition above for descriptions.
      params.customerId = Long.parseLong("INSERT_CUSTOMER_ID_HERE");
    }

    GoogleAdsClient googleAdsClient = null;
    try {
      googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build();
    } catch (FileNotFoundException fnfe) {
      System.err.printf(
          "Failed to load GoogleAdsClient configuration from file. Exception: %s%n", fnfe);
      System.exit(1);
    } catch (IOException ioe) {
      System.err.printf("Failed to create GoogleAdsClient. Exception: %s%n", ioe);
      System.exit(1);
    }

    try {
      new AddConversionAction().runExample(googleAdsClient, params.customerId);
    } catch (GoogleAdsException gae) {
      // GoogleAdsException is the base class for most exceptions thrown by an API request.
      // Instances of this exception have a message and a GoogleAdsFailure that contains a
      // collection of GoogleAdsErrors that indicate the underlying causes of the
      // GoogleAdsException.
      System.err.printf(
          "Request ID %s failed due to GoogleAdsException. Underlying errors:%n",
          gae.getRequestId());
      int i = 0;
      for (GoogleAdsError googleAdsError : gae.getGoogleAdsFailure().getErrorsList()) {
        System.err.printf("  Error %d: %s%n", i++, googleAdsError);
      }
      System.exit(1);
    }
  }

  /**
   * Runs the example.
   *
   * @param googleAdsClient the Google Ads API client.
   * @param customerId the client customer ID.
   * @throws GoogleAdsException if an API request failed with one or more service errors.
   */
  private void runExample(GoogleAdsClient googleAdsClient, long customerId) {

    // Creates a ConversionAction.
    ConversionAction conversionAction =
        ConversionAction.newBuilder()
            // Note that conversion action names must be unique. If a conversion action already
            // exists with the specified conversion_action_name the create operation will fail with
            // a ConversionActionError.DUPLICATE_NAME error.
            .setName("Earth to Mars Cruises Conversion #" + getPrintableDateTime())
            .setCategory(ConversionActionCategory.DEFAULT)
            .setType(ConversionActionType.WEBPAGE)
            .setStatus(ConversionActionStatus.ENABLED)
            .setViewThroughLookbackWindowDays(15L)
            .setValueSettings(
                ValueSettings.newBuilder()
                    .setDefaultValue(23.41)
                    .setAlwaysUseDefaultValue(true)
                    .build())
            .build();

    // Creates the operation.
    ConversionActionOperation operation =
        ConversionActionOperation.newBuilder().setCreate(conversionAction).build();

    try (ConversionActionServiceClient conversionActionServiceClient =
        googleAdsClient.getLatestVersion().createConversionActionServiceClient()) {
      MutateConversionActionsResponse response =
          conversionActionServiceClient.mutateConversionActions(
              Long.toString(customerId), Collections.singletonList(operation));
      System.out.printf("Added %d conversion actions:%n", response.getResultsCount());
      for (MutateConversionActionResult result : response.getResultsList()) {
        System.out.printf(
            "New conversion action added with resource name: '%s'%n", result.getResourceName());
      }
    }
  }
}

      

C#

// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

using CommandLine;
using Google.Ads.Gax.Examples;
using Google.Ads.GoogleAds.Lib;
using Google.Ads.GoogleAds.V25.Errors;
using Google.Ads.GoogleAds.V25.Resources;
using Google.Ads.GoogleAds.V25.Services;
using System;
using static Google.Ads.GoogleAds.V25.Enums.ConversionActionCategoryEnum.Types;
using static Google.Ads.GoogleAds.V25.Enums.ConversionActionStatusEnum.Types;
using static Google.Ads.GoogleAds.V25.Enums.ConversionActionTypeEnum.Types;

namespace Google.Ads.GoogleAds.Examples.V25
{
    /// <summary>
    /// This code example illustrates adding a conversion action.
    /// </summary>
    public class AddConversionAction : ExampleBase
    {
        /// <summary>
        /// Command line options for running the <see cref="AddConversionAction"/> example.
        /// </summary>
        public class Options : OptionsBase
        {
            /// <summary>
            /// The Google Ads customer ID for which the conversion action is added.
            /// </summary>
            [Option("customerId", Required = true, HelpText =
                "The Google Ads customer ID for which the conversion action is added.")]
            public long CustomerId { get; set; }
        }

        /// <summary>
        /// Main method, to run this code example as a standalone application.
        /// </summary>
        /// <param name="args">The command line arguments.</param>
        public static void Main(string[] args)
        {
            Options options = ExampleUtilities.ParseCommandLine<Options>(args);

            AddConversionAction codeExample = new AddConversionAction();
            Console.WriteLine(codeExample.Description);
            codeExample.Run(new GoogleAdsClient(), options.CustomerId);
        }

        /// <summary>
        /// Returns a description about the code example.
        /// </summary>
        public override string Description =>
            "This code example illustrates adding a conversion action.";

        /// <summary>
        /// Runs the code example.
        /// </summary>
        /// <param name="client">The Google Ads client.</param>
        /// <param name="customerId">The Google Ads customer ID for which the conversion action is
        /// added.</param>
        public void Run(GoogleAdsClient client, long customerId)
        {
            // Get the ConversionActionService.
            ConversionActionServiceClient conversionActionService =
                client.GetService(Services.V25.ConversionActionService);

            // Note that conversion action names must be unique.
            // If a conversion action already exists with the specified name the create operation
            // will fail with a ConversionAction.DUPLICATE_NAME error.
            string ConversionActionName = "Earth to Mars Cruises Conversion #"
                + ExampleUtilities.GetRandomString();

            // Add a conversion action.
            ConversionAction conversionAction = new ConversionAction()
            {
                Name = ConversionActionName,
                Category = ConversionActionCategory.Default,
                Type = ConversionActionType.Webpage,
                Status = ConversionActionStatus.Enabled,
                ViewThroughLookbackWindowDays = 15,
                ValueSettings = new ConversionAction.Types.ValueSettings()
                {
                    DefaultValue = 23.41,
                    AlwaysUseDefaultValue = true
                }
            };

            // Create the operation.
            ConversionActionOperation operation = new ConversionActionOperation()
            {
                Create = conversionAction
            };

            try
            {
                // Create the conversion action.
                MutateConversionActionsResponse response =
                    conversionActionService.MutateConversionActions(customerId.ToString(),
                            new ConversionActionOperation[] { operation });

                // Display the results.
                foreach (MutateConversionActionResult newConversionAction in response.Results)
                {
                    Console.WriteLine($"New conversion action with resource name = " +
                        $"'{newConversionAction.ResourceName}' was added.");
                }
            }
            catch (GoogleAdsException e)
            {
                Console.WriteLine("Failure:");
                Console.WriteLine($"Message: {e.Message}");
                Console.WriteLine($"Failure: {e.Failure}");
                Console.WriteLine($"Request ID: {e.RequestId}");
                throw;
            }
        }
    }
}

      

PHP

<?php

/**
 * Copyright 2018 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace Google\Ads\GoogleAds\Examples\Remarketing;

require __DIR__ . '/../../vendor/autoload.php';

use GetOpt\GetOpt;
use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames;
use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser;
use Google\Ads\GoogleAds\Examples\Utils\Helper;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClient;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClientBuilder;
use Google\Ads\GoogleAds\Lib\V25\GoogleAdsException;
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
use Google\Ads\GoogleAds\V25\Enums\ConversionActionCategoryEnum\ConversionActionCategory;
use Google\Ads\GoogleAds\V25\Enums\ConversionActionStatusEnum\ConversionActionStatus;
use Google\Ads\GoogleAds\V25\Enums\ConversionActionTypeEnum\ConversionActionType;
use Google\Ads\GoogleAds\V25\Errors\GoogleAdsError;
use Google\Ads\GoogleAds\V25\Resources\ConversionAction;
use Google\Ads\GoogleAds\V25\Resources\ConversionAction\ValueSettings;
use Google\Ads\GoogleAds\V25\Services\ConversionActionOperation;
use Google\Ads\GoogleAds\V25\Services\MutateConversionActionsRequest;
use Google\ApiCore\ApiException;

/**
 * This example illustrates adding a conversion action.
 */
class AddConversionAction
{
    private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE';

    public static function main()
    {
        // Either pass the required parameters for this example on the command line, or insert them
        // into the constants above.
        $options = (new ArgumentParser())->parseCommandArguments(
            [
            ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT
            ]
        );

        // Generate a refreshable OAuth2 credential for authentication.
        $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build();

        // Construct a Google Ads client configured from a properties file and the
        // OAuth2 credentials above.
        $googleAdsClient = (new GoogleAdsClientBuilder())
            ->fromFile()
            ->withOAuth2Credential($oAuth2Credential)
            ->build();

        try {
            self::runExample(
                $googleAdsClient,
                $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID
            );
        } catch (GoogleAdsException $googleAdsException) {
            printf(
                "Request with ID '%s' has failed.%sGoogle Ads failure details:%s",
                $googleAdsException->getRequestId(),
                PHP_EOL,
                PHP_EOL
            );
            foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) {
                /**
 * @var GoogleAdsError $error
*/
                printf(
                    "\t%s: %s%s",
                    $error->getErrorCode()->getErrorCode(),
                    $error->getMessage(),
                    PHP_EOL
                );
            }
            exit(1);
        } catch (ApiException $apiException) {
            printf(
                "ApiException was thrown with message '%s'.%s",
                $apiException->getMessage(),
                PHP_EOL
            );
            exit(1);
        }
    }

    /**
     * Runs the example.
     *
     * @param GoogleAdsClient $googleAdsClient the Google Ads API client
     * @param int $customerId the customer ID
     */
    public static function runExample(GoogleAdsClient $googleAdsClient, int $customerId)
    {
        // Creates a conversion action.
        $conversionAction = new ConversionAction(
            [
            // Note that conversion action names must be unique.
            // If a conversion action already exists with the specified conversion_action_name
            // the create operation will fail with a ConversionActionError.DUPLICATE_NAME error.
            'name' => 'Earth to Mars Cruises Conversion #' . Helper::getPrintableDatetime(),
            'category' => ConversionActionCategory::PBDEFAULT,
            'type' => ConversionActionType::WEBPAGE,
            'status' => ConversionActionStatus::ENABLED,
            'view_through_lookback_window_days' => 15,
            'value_settings' => new ValueSettings(
                [
                'default_value' => 23.41,
                'always_use_default_value' => true
                ]
            )
            ]
        );

        // Creates a conversion action operation.
        $conversionActionOperation = new ConversionActionOperation();
        $conversionActionOperation->setCreate($conversionAction);

        // Issues a mutate request to add the conversion action.
        $conversionActionServiceClient = $googleAdsClient->getConversionActionServiceClient();
        $response = $conversionActionServiceClient->mutateConversionActions(
            MutateConversionActionsRequest::build($customerId, [$conversionActionOperation])
        );

        printf("Added %d conversion actions:%s", $response->getResults()->count(), PHP_EOL);

        foreach ($response->getResults() as $addedConversionAction) {
            /**
 * @var ConversionAction $addedConversionAction
*/
            printf(
                "New conversion action added with resource name: '%s'%s",
                $addedConversionAction->getResourceName(),
                PHP_EOL
            );
        }
    }
}

AddConversionAction::main();

      

Python

#!/usr/bin/env python
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This example illustrates adding a conversion action."""

import argparse
import sys
import uuid

from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
from google.ads.googleads.v24.resources.types.conversion_action import (
    ConversionAction,
)
from google.ads.googleads.v24.services.services.conversion_action_service import (
    ConversionActionServiceClient,
)
from google.ads.googleads.v24.services.types.conversion_action_service import (
    ConversionActionOperation,
    MutateConversionActionsResponse,
)


def main(client: GoogleAdsClient, customer_id: str) -> None:
    conversion_action_service: ConversionActionServiceClient = (
        client.get_service("ConversionActionService")
    )

    # Create the operation.
    conversion_action_operation: ConversionActionOperation = client.get_type(
        "ConversionActionOperation"
    )

    # Create conversion action.
    conversion_action: ConversionAction = conversion_action_operation.create

    # Note that conversion action names must be unique. If a conversion action
    # already exists with the specified conversion_action_name, the create
    # operation will fail with a ConversionActionError.DUPLICATE_NAME error.
    conversion_action.name = f"Earth to Mars Cruises Conversion {uuid.uuid4()}"
    conversion_action.type_ = (
        client.enums.ConversionActionTypeEnum.UPLOAD_CLICKS
    )
    conversion_action.category = (
        client.enums.ConversionActionCategoryEnum.DEFAULT
    )
    conversion_action.status = client.enums.ConversionActionStatusEnum.ENABLED
    conversion_action.view_through_lookback_window_days = 15

    # Create a value settings object.
    value_settings: ConversionAction.ValueSettings = (
        conversion_action.value_settings
    )
    value_settings.default_value = 15.0
    value_settings.always_use_default_value = True

    # Add the conversion action.
    conversion_action_response: MutateConversionActionsResponse = (
        conversion_action_service.mutate_conversion_actions(
            customer_id=customer_id,
            operations=[conversion_action_operation],
        )
    )

    print(
        "Created conversion action "
        f'"{conversion_action_response.results[0].resource_name}".'
    )


if __name__ == "__main__":
    parser: argparse.ArgumentParser = argparse.ArgumentParser(
        description="Adds a conversion action for specified customer."
    )
    # The following argument(s) should be provided to run the example.
    parser.add_argument(
        "-c",
        "--customer_id",
        type=str,
        required=True,
        help="The Google Ads customer ID.",
    )
    args: argparse.Namespace = parser.parse_args()

    # GoogleAdsClient will read the google-ads.yaml configuration file in the
    # home directory if none is specified.
    googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage(
        version="v24"
    )

    try:
        main(googleads_client, args.customer_id)
    except GoogleAdsException as ex:
        print(
            f'Request with ID "{ex.request_id}" failed with status '
            f'"{ex.error.code().name}" and includes the following errors:'
        )
        for error in ex.failure.errors:
            print(f'\tError with message "{error.message}".')
            if error.location:
                for field_path_element in error.location.field_path_elements:
                    print(f"\t\tOn field: {field_path_element.field_name}")
        sys.exit(1)

      

Ruby

#!/usr/bin/env ruby
# Encoding: utf-8
#
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This code example illustrates adding a conversion action.

require 'optparse'
require 'google/ads/google_ads'
require 'date'
require_relative '../shared/error_handler.rb'

def add_conversion_action(customer_id)
  # GoogleAdsClient will read a config file from
  # ENV['HOME']/google_ads_config.rb when called without parameters
  client = Google::Ads::GoogleAds::GoogleAdsClient.new


  # Add a conversion action.
  conversion_action = client.resource.conversion_action do |ca|
    ca.name = "Earth to Mars Cruises Conversion #{(Time.new.to_f * 100).to_i}"
    ca.type = :UPLOAD_CLICKS
    ca.category = :DEFAULT
    ca.status = :ENABLED
    ca.view_through_lookback_window_days = 15

    # Create a value settings object.
    ca.value_settings = client.resource.value_settings do |vs|
      vs.default_value = 15
      vs.always_use_default_value = true
    end
  end

  # Create the operation.
  conversion_action_operation = client.operation.create_resource.conversion_action(conversion_action)

  # Add the ad group ad.
  response = client.service.conversion_action.mutate_conversion_actions(
    customer_id: customer_id,
    operations: [conversion_action_operation],
  )

  puts "New conversion action with resource name = #{response.results.first.resource_name}."
end

if __FILE__ == $0
  options = {}
  # The following parameter(s) should be provided to run the example. You can
  # either specify these by changing the INSERT_XXX_ID_HERE values below, or on
  # the command line.
  #
  # Parameters passed on the command line will override any parameters set in
  # code.
  #
  # Running the example with -h will print the command line usage.
  options[:customer_id] = 'INSERT_CUSTOMER_ID_HERE'

  OptionParser.new do |opts|
    opts.banner = sprintf('Usage: %s [options]', File.basename(__FILE__))

    opts.separator ''
    opts.separator 'Options:'

    opts.on('-C', '--customer-id CUSTOMER-ID', String, 'Customer ID') do |v|
      options[:customer_id] = v
    end

    opts.separator ''
    opts.separator 'Help:'

    opts.on_tail('-h', '--help', 'Show this message') do
      puts opts
      exit
    end
  end.parse!

  begin
    add_conversion_action(options.fetch(:customer_id).tr("-", ""))
  rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e
    GoogleAdsErrorHandler.handle_google_ads_error(e)
    raise # Re-raise the error to maintain original script behavior.
  end
end

      

Perl

#!/usr/bin/perl -w
#
# Copyright 2019, Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# This example illustrates adding a conversion action.

use strict;
use warnings;
use utf8;

use FindBin qw($Bin);
use lib "$Bin/../../lib";
use Google::Ads::GoogleAds::Client;
use Google::Ads::GoogleAds::Utils::GoogleAdsHelper;
use Google::Ads::GoogleAds::V25::Resources::ConversionAction;
use Google::Ads::GoogleAds::V25::Resources::ValueSettings;
use Google::Ads::GoogleAds::V25::Enums::ConversionActionCategoryEnum
  qw(DEFAULT);
use Google::Ads::GoogleAds::V25::Enums::ConversionActionTypeEnum   qw(WEBPAGE);
use Google::Ads::GoogleAds::V25::Enums::ConversionActionStatusEnum qw(ENABLED);
use
  Google::Ads::GoogleAds::V25::Services::ConversionActionService::ConversionActionOperation;

use Getopt::Long qw(:config auto_help);
use Pod::Usage;
use Cwd          qw(abs_path);
use Data::Uniqid qw(uniqid);

# The following parameter(s) should be provided to run the example. You can
# either specify these by changing the INSERT_XXX_ID_HERE values below, or on
# the command line.
#
# Parameters passed on the command line will override any parameters set in
# code.
#
# Running the example with -h will print the command line usage.
my $customer_id = "INSERT_CUSTOMER_ID_HERE";

sub add_conversion_action {
  my ($api_client, $customer_id) = @_;

  # Note that conversion action names must be unique.
  # If a conversion action already exists with the specified conversion_action_name,
  # the create operation fails with error ConversionActionError.DUPLICATE_NAME.
  my $conversion_action_name = "Earth to Mars Cruises Conversion #" . uniqid();

  # Create a conversion action.
  my $conversion_action =
    Google::Ads::GoogleAds::V25::Resources::ConversionAction->new({
      name                          => $conversion_action_name,
      category                      => DEFAULT,
      type                          => WEBPAGE,
      status                        => ENABLED,
      viewThroughLookbackWindowDays => 15,
      valueSettings                 =>
        Google::Ads::GoogleAds::V25::Resources::ValueSettings->new({
          defaultValue          => 23.41,
          alwaysUseDefaultValue => "true"
        })});

  # Create a conversion action operation.
  my $conversion_action_operation =
    Google::Ads::GoogleAds::V25::Services::ConversionActionService::ConversionActionOperation
    ->new({create => $conversion_action});

  # Add the conversion action.
  my $conversion_actions_response =
    $api_client->ConversionActionService()->mutate({
      customerId => $customer_id,
      operations => [$conversion_action_operation]});

  printf "New conversion action added with resource name: '%s'.\n",
    $conversion_actions_response->{results}[0]{resourceName};

  return 1;
}

# Don't run the example if the file is being included.
if (abs_path($0) ne abs_path(__FILE__)) {
  return 1;
}

# Get Google Ads Client, credentials will be read from ~/googleads.properties.
my $api_client = Google::Ads::GoogleAds::Client->new();

# By default examples are set to die on any server returned fault.
$api_client->set_die_on_faults(1);

# Parameters passed on the command line will override any parameters set in code.
GetOptions("customer_id=s" => \$customer_id);

# Print the help message if the parameters are not initialized in the code nor
# in the command line.
pod2usage(2) if not check_params($customer_id);

# Call the example.
add_conversion_action($api_client, $customer_id =~ s/-//gr);

=pod

=head1 NAME

add_conversion_action

=head1 DESCRIPTION

This example illustrates adding a conversion action.

=head1 SYNOPSIS

add_conversion_action.pl [options]

    -help                       Show the help message.
    -customer_id                The Google Ads customer ID.

=cut

      

curl

Поскольку приведенные выше примеры носят общий характер, ниже приведены дополнительные примечания, чтобы ConversionAction был правильно настроен для кампаний с максимальной эффективностью. Каждое из ваших действий-конверсий должно быть настроено следующим образом:

  • Тип. Задайте для параметра ConversionActionType значение WEBPAGE, поскольку события покупки происходят на сайте.

  • Доступно для назначения ставок – задайте значение true для основного действия-конверсии (покупки), чтобы оптимизировать кампании по продажам. Для дополнительных действий-конверсий (например, добавления в корзину) задайте ценность false.

  • Категория. Для каждого действия-конверсии (основного или дополнительного) задайте значение ConversionActionCategory. Ниже вы найдете категории для каждого из семи действий-конверсий, которые мы рекомендуем настроить. Обратите внимание, что Google Реклама автоматически назначает действия-конверсии стандартной цели конверсии на основе их категории. Например, действия-конверсии "Покупка" назначаются стандартной цели конверсии "Покупки". Позже вы сможете настроить кампанию с максимальной эффективностью так, чтобы она была оптимизирована для этой цели.

Ниже приведен список рекомендуемых действий-конверсий. Рекомендуем реализовать по крайней мере первые четыре действия-конверсии и как можно больше других рекомендуемых действий.

Вы также можете настроить дополнительные события, связанные с онлайн-продажами. Чтобы отслеживать данные ещё точнее, вы можете создать дополнительные или специальные действия-конверсии. Например, можно создать действие "Добавить платежную информацию", которое будет регистрироваться каждый раз, когда пользователь выполняет поиск на сайте, или действие "Поиск", которое будет регистрироваться каждый раз, когда пользователь выполняет поиск на сайте. Дополнительные действия-конверсии позволяют продавцам отслеживать больше данных и используются Google Рекламой для наблюдения.

Приоритет Действие-конверсия Категория действия-конверсии Название события тега Google Описание
Обязательно Покупка ПОКУПКА purchase Пользователь совершает покупку.
Настоятельно рекомендуется для всех конструкторов магазинов. Добавление в корзину ADD_TO_CART add_to_cart Пользователь добавляет товар в корзину.
Настоятельно рекомендуется для всех, кто создает магазины Начало оформления покупки BEGIN_CHECKOUT begin_checkout Пользователь начинает оформление покупки.
Настоятельно рекомендуется для всех, кто создает магазины просмотр товара; PAGE_VIEW page_view Пользователь открывает страницу товара.
Настоятельно рекомендуется, если применимо (обычно не применимо к конструкторам магазинов) Зарегистрироваться РЕГИСТРАЦИЯ sign_up Пользователь создает аккаунт.
Настоятельно рекомендуется, если применимо (обычно не применимо к конструкторам магазинов) генерация лида; SUBMIT_LEAD_FORM generate_lead Пользователь создает лида с помощью формы
Настоятельно рекомендуется, если применимо (обычно не применимо к конструкторам магазинов) Подписаться SUBSCRIBE_PAID неприменимо (специальный) Пользователь оформляет подписку на платный сервис
Настоятельно рекомендуется, если применимо (обычно не применимо к конструкторам магазинов) Запись на встречу BOOK_APPOINTMENT неприменимо (специальный) Пользователь записывается на встречу
Настоятельно рекомендуется, если применимо (обычно не применимо к конструкторам магазинов) Запрос цены REQUEST_QUOTE неприменимо (специальный) Пользователь отправляет форму с запросом цены.

Продавцы с существующим аккаунтом рекламодателя

Если вы разрешаете продавцам регистрироваться с существующим аккаунтом Google Рекламы, вы можете столкнуться с ситуацией, когда в аккаунте уже есть действия-конверсии. Мы не рекомендуем использовать существующее действие-конверсию, поскольку нет гарантии, что оно настроено правильно. Кроме того, вам нужно выполнить дополнительные действия, чтобы учесть возможные сценарии:

  • В аккаунте несколько целей (например, "Покупки", "Просмотры страниц" и "Контакты"), которые отмечены как цели по умолчанию на уровне аккаунта. При создании новой кампании по умолчанию выполняется оптимизация по всем этим целям. Для кампании с максимальной эффективностью это не подходит.

  • В аккаунте уже есть одно или несколько действий-конверсий для отслеживания покупок, и они уже сгруппированы в рамках цели "Покупки". Это означает, что после того, как вы настроите кампанию, покупка будет учитываться дважды, поскольку сработают два тега конверсии.

Чтобы в кампании с максимальной эффективностью использовалось только ваше собственное действие-конверсия, выполните следующие действия:

  1. Создайте CustomConversionGoal и добавьте действие-конверсию "Покупка" в список conversion_actions[] цели. Установите статус ENABLED.

  2. В объекте ConversionGoalCampaignConfig кампании с максимальной эффективностью задайте для поля custom_conversion_goal собственную цель, созданную на шаге 1.

  3. В результате шага 2 Google Реклама должна была автоматически обновить ConversionGoalCampaignConfig кампании, чтобы для goal_config_level было задано значение CAMPAIGN (а не CUSTOMER, которое указывает на использование целей по умолчанию на уровне аккаунта). Однако стоит проверить, действительно ли это произошло.

Как получить тег для действия-конверсии

После того как вы создадите действие-конверсию, вам нужно будет добавить на страницу конверсии на сайте рекламодателя фрагмент кода, который называется тегом. Чтобы обеспечить учет всех конверсий независимо от типа браузера, мы рекомендуем использовать обновленный тег отслеживания конверсий Google Рекламы. Этот тег состоит из двух частей:

  • global_site_tag, который необходимо добавить на все страницы сайта рекламодателя.

  • event_snippet, который нужно разместить на веб-страницах, связанных с действиями-конверсиями, например на странице подтверждения заказа или отправки лида.

Получить эти две части можно с помощью ConversionActionService.

Тег создает файлы cookie, в которых хранится уникальный идентификатор клиента или клика по объявлению, который привел клиента на сайт. Файлы cookie получают информацию о клике по объявлению из параметра идентификатора клика Google (GCLID), включенного в тег отслеживания конверсий. Вам необходимо включить на сайте рекламодателя и в системе отслеживания лидов возможность регистрировать и хранить идентификатор клика Google (GCLID) – уникальный идентификатор, который Google Реклама предоставляет для каждого показа объявления Google.

Глобальный тег и места его установки

Тег Google (gtag.js) – это фреймворк для добавления тегов и API, который позволяет отправлять данные о событиях в Google Рекламу и Google Аналитику. Глобальный тег используется вместе с фрагментом события или фрагментом кода с номером телефона для отслеживания конверсий. Добавьте тег Google в раздел <head> на каждой странице сайта рекламодателя и настройте его для работы с Google Рекламой. Затем вы можете регистрировать события и отправлять данные в Google Рекламу с помощью команд gtag(). Подробнее о том, как использовать глобальный тег для отслеживания конверсий в Google Рекламе…

С тегом Google используются следующие команды:

  • config. Инициализирует сервис Google (Рекламу, Аналитику и пр.), задает настройки и подготавливает отправку данных в аккаунт.

  • Событие. Зарегистрируйте конверсию, отправив событие, например покупку (рекомендуется) или добавление в корзину (дополнительные действия-конверсии). Рекомендуем ознакомиться с руководством по событиям gtag.js.

  • set. Задает параметры, общие для всех событий на странице, например валюту.

Ниже приведен пример фрагмента кода JavaScript глобального тега, который отправляет данные в Google Рекламу. Значение-плейсхолдер GOOGLE_CONVERSION_ID – это уникальный числовой идентификатор аккаунта рекламодателя.

<!-- Google Tag (gtag.js) - Google Ads: GOOGLE_CONVERSION_ID -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID">
</script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());
   gtag('set', 'developer_id.<developer ID>', true); // Replace with your Google tag Developer ID
  gtag('config', 'AW-GOOGLE_CONVERSION_ID');
</script>

На каждой странице должен быть только один фрагмент тега Google, Если на странице уже есть экземпляр gtag.js, добавьте в него новые идентификаторы тегов. Чтобы отправлять данные в несколько аккаунтов, добавьте вызов команды config для каждого из них, указав идентификатор конверсии, как показано в примере ниже.

<!-- Google Tag (gtag.js) - Google Ads: GOOGLE_CONVERSION_ID_1 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-GOOGLE_CONVERSION_ID_1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments)};
  gtag('js', new Date());
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_1');
  gtag('config', 'AW-GOOGLE_CONVERSION_ID_2');
</script>

Дополнительная информация о фрагменте события и о том, где его установить

Чтобы отслеживать конверсии-покупки, необходимо добавить фрагмент события-покупки на страницу конверсии. Обычно это страница подтверждения заказа. Его можно разместить в любой части кода страницы после глобального тега. Фрагменты событий для дополнительных действий-конверсий (например, добавления в корзину) нужно разместить на соответствующих страницах.

В приведенном ниже примере кода элемент AW-CONVERSION_ID указывает, где находится уникальный идентификатор конверсии для вашего аккаунта Google Рекламы, а элемент gTag_developer_ID – где находится идентификатор разработчика тега Google. Элемент AW-CONVERSION_LABEL позволяет найти ярлык конверсии, уникальный для каждого действия-конверсии.

<!-- Event snippet for a purchase conversion page -->
<script>
  gtag('event', 'conversion', {
       'send_to':'AW-CONVERSION_ID/CONVERSION_LABEL',
       'developer_id.<gTag developer ID>': true,
       'transaction_id': '<transaction_id (string)>' //unique ID for the transaction (e.g. an order ID); it's used for de-duplication purposes
       'value': 1.0,
       'currency': 'USD', //three-letter currency code, useful for advertisers who accept multiple currencies
       'country': 'US',
       'new_customer': false, //new customer acquisition goal
       'tax': 1.24, //tax cost-US only
       'shipping': 0.00, //shipping cost-US only
       'delivery_postal_code': '94043', //shipping data validation-US only
       'estimated_delivery_date': '2020-07-31', //shipping validation-US only
       'aw_merchant_id': 12345, //shipping validation-US only
       'aw_feed_country': 'US', //shipping validation-US only
       'aw_feed_language': 'EN', //shipping validation-US only
       'items': [
       {
             'id': 'P12345',
             'name': 'Android Warhol T-Shirt',
             'quantity': 2,
             'price': 12.04,
             'estimated_delivery_date': '2020-07-31', //shipping-US only
              'google_business_vertical': 'retail'
       }, …],
  });
</script>

Некоторые параметры не обязательны, но мы рекомендуем вам добавлять максимум информации о каждом событии. Подробнее о том, какие параметры доступны для каждого типа событий…

Параметры позволяют получать дополнительную информацию о действиях пользователей на вашем сайте или в приложении.

Если вы хотите отслеживать события-конверсии на основе кликов (например, нажатий кнопок или динамических ответов для сайта при использовании AJAX), вы можете также использовать следующий код:

<!-- Event snippet for test conversion click -->
In your html page, add the snippet and call gtag_report_conversion when someone clicks on the chosen link or button. -->
<script>
function gtag_report_conversion(url) {
  var callback = function () {
    if (typeof(url) != 'undefined') {
      window.location = url;
    }
  };
  gtag('event', 'conversion', {
      'send_to': 'AW-CONVERSION_ID/CONVERSION_LABEL',
      'value': 1.0,
      'event_callback': callback,
      //other parameters
  });
  return false;
}
</script>

В теге Google есть встроенный Consent API для управления согласием пользователей. Он позволяет различать согласие пользователя на применение файлов cookie в рекламных целях и в целях аналитики.

От вас требуется интегрировать как минимум вызов gtag('consent', 'update' {...}), не требующий никаких действий со стороны клиента. Таким образом теги Google (Google Реклама, Floodlight, Google Аналитика, тег связывания конверсий) смогут получать самый новый статус согласия пользователя и добавлять эту информацию в сетевые запросы в Google (с помощью параметра &gcs).

Дополнительно можно реализовать статус gtag('consent', default' {...}) (или помочь рекламодателям сделать это – например, через интерфейс) и разблокировать теги Google (например, для срабатывания по условию без учета согласия), чтобы режим согласия мог активировать их с поддержкой режима согласия.

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

Советы

В управляющем аккаунте Google Рекламы можно отслеживать конверсии во всех аккаунтах рекламодателей с помощью одного тега кода конверсии. Подробнее об отслеживании конверсий в управляющем аккаунте…

Лучший способ проверить, работает ли отслеживание конверсий, – перейти на сайт продавца (или внутренний тестовый сайт) и совершить покупку. Затем с помощью инструмента Google Tag Assistant проверьте, видит ли Google Реклама ваш тег и регистрирует ли конверсии. Чтобы узнать больше, ознакомьтесь с руководством по устранению неполадок. Дополнительные советы можно найти в статье Как устранять неполадки с тегом на всех страницах сайта.

Вы можете дополнить приведенный выше тег конверсии расширенным отслеживанием конверсий, которое позволяет получать более точные данные о конверсиях и эффективнее управлять назначением ставок. Подробнее о том, как настроить расширенное отслеживание конверсий… Прежде чем внедрять расширенное отслеживание конверсий, убедитесь, что ваши продавцы могут соблюдать правила в отношении данных клиентов в Google Рекламе.