Развернутые текстовые объявления

Используйте развернутые текстовые объявления для рекламы товаров и услуг в рекламной сети Google. Вот некоторые преимущества этого формата:

Два заголовка
В развернутых тестовых объявлениях можно использовать два заголовка. Первый заголовок отделяется от второго знаком тире. При показе на мобильных устройствах такой заголовок может занимать две строки.
Больше текста
Каждый из заголовков может содержать до 30 символов (это больше, чем в заголовках стандартных текстовых объявлений). В языках с двухбайтовыми символами, таких как китайский, японский и корейский, длина заголовка ограничена 15 знаками.
Расширенное описание
В развернутых тестовых объявлениях используется только одна строка описания длинной до 80 символов. При этом применение усечения и многоточия сведено к минимуму, что делает отображение объявлений более предсказуемым.
Настройка URL
Вам не нужно указывать отображаемый URL объявления, поскольку он генерируется на основе адреса целевой страницы и полей пути (path1 и path2) с информацией о том, куда будет направлен пользователь, нажавший на объявление. Принцип действия конечного URL и URL отслеживания в развернутых текстовых объявлениях тот же, что и в обычных.

Ниже приведен пример загруженного через API AdWords объявления вымышленной компании Interplanetary Cruises в пользовательском интерфейсе AdWords.

Поля в этом развернутом текстовом объявлении имеют следующие значения:

Поле Значение
headlinePart1 Cruise to Mars #12QjNuTP
headlinePart2 Best Space Cruise Line
description Buy your tickets now!
finalUrls ["http://www.example.com/0"]
path1 all-inclusive
path2 deals

Пример

Рассмотрим код приведенного выше объявления компании Interplanetary Cruises.

Как и другие типы объявлений, объекты ExpandedTextAd можно добавлять с помощью метода AdGroupAdService.mutate(). В них необходимо указать два заголовка, описание и по меньшей мере один конечный URL.

Java

/**
 * Runs the example.
 *
 * @param adWordsServices the services factory.
 * @param session the session.
 * @param adGroupId the ID of the ad group where the ad will be created.
 * @throws ApiException if the API request failed with one or more service errors.
 * @throws RemoteException if the API request failed due to other errors.
 */
public static void runExample(
    AdWordsServicesInterface adWordsServices, AdWordsSession session, long adGroupId)
    throws RemoteException {
  // Get the AdGroupAdService.
  AdGroupAdServiceInterface adGroupAdService =
      adWordsServices.get(session, AdGroupAdServiceInterface.class);

  List<AdGroupAdOperation> operations = new ArrayList<>();

  for (int i = 0; i < NUMBER_OF_ADS; i++) {
    // Create expanded text ad.
    ExpandedTextAd expandedTextAd = new ExpandedTextAd();
    expandedTextAd.setHeadlinePart1(String.format("Cruise #%d to Mars", i));
    expandedTextAd.setHeadlinePart2("Best Space Cruise Line");
    expandedTextAd.setDescription("Buy your tickets now!");
    expandedTextAd.setFinalUrls(new String[] {"http://www.example.com/" + i});

    // Create ad group ad.
    AdGroupAd expandedTextAdGroupAd = new AdGroupAd();
    expandedTextAdGroupAd.setAdGroupId(adGroupId);
    expandedTextAdGroupAd.setAd(expandedTextAd);

    // Optional: set the status.
    expandedTextAdGroupAd.setStatus(AdGroupAdStatus.PAUSED);

    // Create the operation.
    AdGroupAdOperation adGroupAdOperation = new AdGroupAdOperation();
    adGroupAdOperation.setOperand(expandedTextAdGroupAd);
    adGroupAdOperation.setOperator(Operator.ADD);

    operations.add(adGroupAdOperation);
  }

  // Add ads.
  AdGroupAdReturnValue result =
      adGroupAdService.mutate(operations.toArray(new AdGroupAdOperation[operations.size()]));

  // Display ads.
  for (AdGroupAd adGroupAdResult : result.getValue()) {
    ExpandedTextAd newAd = (ExpandedTextAd) adGroupAdResult.getAd();
    System.out.printf("Expanded text ad with ID %d and headline '%s - %s' was added.%n",
        newAd.getId(), newAd.getHeadlinePart1(), newAd.getHeadlinePart2());
  }
}

C#

using (AdGroupAdService adGroupAdService =
    (AdGroupAdService) user.GetService(AdWordsService.v201802.AdGroupAdService)) {

  List<AdGroupAdOperation> operations = new List<AdGroupAdOperation>();

  for (int i = 0; i < NUMBER_OF_ADS; i++) {
    // Create the expanded text ad.
    ExpandedTextAd expandedTextAd = new ExpandedTextAd();
    expandedTextAd.headlinePart1 = "Cruise #" + i.ToString() + " to Mars";
    expandedTextAd.headlinePart2 = "Best Space Cruise Line";
    expandedTextAd.description = "Buy your tickets now!";
    expandedTextAd.finalUrls = new string[] { "http://www.example.com/" + i };

    AdGroupAd expandedTextAdGroupAd = new AdGroupAd();
    expandedTextAdGroupAd.adGroupId = adGroupId;
    expandedTextAdGroupAd.ad = expandedTextAd;

    // Optional: Set the status.
    expandedTextAdGroupAd.status = AdGroupAdStatus.PAUSED;

    // Create the operation.
    AdGroupAdOperation operation = new AdGroupAdOperation();
    operation.@operator = Operator.ADD;
    operation.operand = expandedTextAdGroupAd;

    operations.Add(operation);
  }

  AdGroupAdReturnValue retVal = null;

  try {
    // Create the ads.
    retVal = adGroupAdService.mutate(operations.ToArray());

    // Display the results.
    if (retVal != null && retVal.value != null) {
      foreach (AdGroupAd adGroupAd in retVal.value) {
        ExpandedTextAd newAd = adGroupAd.ad as ExpandedTextAd;
        Console.WriteLine("Expanded text ad with ID '{0}' and headline '{1} - {2}' " +
            "was added.", newAd.id, newAd.headlinePart1, newAd.headlinePart2);
      }
    } else {
      Console.WriteLine("No expanded text ads were created.");
    }
    adGroupAdService.Close();
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to create expanded text ad.", e);
  }
}

PHP

public static function runExample(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    $adGroupId
) {
    $adGroupAdService = $adWordsServices->get($session, AdGroupAdService::class);

    $operations = [];
    // Create an expanded text ad.
    $expandedTextAd = new ExpandedTextAd();
    $expandedTextAd->setHeadlinePart1('Cruise to Mars #' . uniqid());
    $expandedTextAd->setHeadlinePart2('Best Space Cruise Line');
    $expandedTextAd->setDescription('Buy your tickets now!');
    $expandedTextAd->setFinalUrls(['http://www.example.com']);
    $expandedTextAd->setPath1('all-inclusive');
    $expandedTextAd->setPath2('deals');

    // Create ad group ad.
    $adGroupAd = new AdGroupAd();
    $adGroupAd->setAdGroupId($adGroupId);
    $adGroupAd->setAd($expandedTextAd);

    // Optional: Set additional settings.
    $adGroupAd->setStatus(AdGroupAdStatus::PAUSED);

    // Create ad group ad operation and add it to the list.
    $operation = new AdGroupAdOperation();
    $operation->setOperand($adGroupAd);
    $operation->setOperator(Operator::ADD);
    $operations[] = $operation;

    // Create another expanded text ad.
    $expandedTextAd = new ExpandedTextAd();
    $expandedTextAd->setHeadlinePart1('Cruise to Venus #' . uniqid());
    $expandedTextAd->setHeadlinePart2('Best Space Cruise Line');
    $expandedTextAd->setDescription('Buy your tickets now!');
    $expandedTextAd->setFinalUrls(['http://www.example.com']);

    // Create ad group ad.
    $adGroupAd = new AdGroupAd();
    $adGroupAd->setAdGroupId($adGroupId);
    $adGroupAd->setAd($expandedTextAd);
    // Optional: Set additional settings.
    $adGroupAd->setStatus(AdGroupAdStatus::PAUSED);

    // Create ad group ad operation and add it to the list.
    $operation = new AdGroupAdOperation();
    $operation->setOperand($adGroupAd);
    $operation->setOperator(Operator::ADD);
    $operations[] = $operation;

    // Add expanded text ads on the server.
    $result = $adGroupAdService->mutate($operations);

    // Create the expanded text ads on the server and print out some information
    // for each created expanded text ad.
    foreach ($result->getValue() as $adGroupAd) {
        printf(
            "Expanded text ad with ID %d and headline '%s - %s' was added.\n",
            $adGroupAd->getAd()->getId(),
            $adGroupAd->getAd()->getHeadlinePart1(),
            $adGroupAd->getAd()->getHeadlinePart2()
        );
    }
}

Perl

sub add_expanded_text_ads {
  my $client      = shift;
  my $ad_group_id = shift;

  my $num_ads    = 5;
  my @operations = ();
  for (my $i = 0 ; $i < $num_ads ; $i++) {
    # Create expanded text ad.
    my $expanded_text_ad = Google::Ads::AdWords::v201802::ExpandedTextAd->new({
        headlinePart1 => "Cruise to Mars #" . substr(uniqid(), 0, 8),
        headlinePart2 => "Best Space Cruise Line",
        description   => "Buy your tickets now!",
        finalUrls     => ["http://www.example.com/" . $i],
        path1         => "all-inclusive",
        path2         => "deals"
    });

    # Create ad group ad for the expanded text ad.
    my $ad_group_ad = Google::Ads::AdWords::v201802::AdGroupAd->new({
        adGroupId => $ad_group_id,
        ad        => $expanded_text_ad,
        # Additional properties (non-required).
        status => "PAUSED"
    });

    # Create operation.
    my $ad_group_ad_operation =
      Google::Ads::AdWords::v201802::AdGroupAdOperation->new({
        operator => "ADD",
        operand  => $ad_group_ad
      });
    push @operations, $ad_group_ad_operation;
  }

  # Add expanded text ad.
  my $result =
    $client->AdGroupAdService()->mutate({operations => \@operations});

  # Display results.
  if ($result->get_value()) {
    foreach my $ad_group_ad (@{$result->get_value()}) {
      printf "New expanded text ad with id \"%d\" and " .
        "headline \"%s - %s\" was added.\n",
        $ad_group_ad->get_ad()->get_id(),
        $ad_group_ad->get_ad()->get_headlinePart1(),
        $ad_group_ad->get_ad()->get_headlinePart2();
    }
  } else {
    print "No expanded text ads were added.\n";
  }

  return 1;
}

Python

def main(client, ad_group_id):
  # Initialize appropriate service.
  ad_group_ad_service = client.GetService('AdGroupAdService', version='v201802')

  operations = [
      {
          'operator': 'ADD',
          'operand': {
              'xsi_type': 'AdGroupAd',
              'adGroupId': ad_group_id,
              'ad': {
                  'xsi_type': 'ExpandedTextAd',
                  'headlinePart1': ('Cruise #%s to Mars'
                                    % str(uuid.uuid4())[:8]),
                  'headlinePart2': 'Best Space Cruise Line',
                  'description': 'Buy your tickets now!',
                  'finalUrls': ['http://www.example.com/%s' % i],
              },
              # Optional fields.
              'status': 'PAUSED'
          }
      } for i in range(NUMBER_OF_ADS)
  ]
  ads = ad_group_ad_service.mutate(operations)

  # Display results.
  for ad in ads['value']:
    print ('Ad of type "%s" with id "%d" was added.'
           '\n\theadlinePart1: %s\n\theadlinePart2: %s'
           % (ad['ad']['Ad.Type'], ad['ad']['id'],
              ad['ad']['headlinePart1'], ad['ad']['headlinePart2']))

Ruby

ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)

# Create text ads.
# The 'xsi_type' field allows you to specify the xsi:type of the object
# being created. It's only necessary when you must provide an explicit
# type that the client library can't infer.
operations = 5.times.map do |i|
  expanded_text_ad = {
    :xsi_type => 'ExpandedTextAd',
    :headline_part1 => 'Cruise to Mars #%d' % (Time.new.to_f * 1000).to_i,
    :headline_part2 => 'Best Space Cruise Line',
    :description => 'Buy your tickets now!',
    :final_urls => ['http://www.example.com/%d' % i],
    :path1 => 'all-inclusive',
    :path2 => 'deals'
  }

  ad_group_ad = {
    :ad_group_id => ad_group_id,
    :ad => expanded_text_ad,
    # Additional properties (non-required).
    :status => 'PAUSED'
  }

  operation = {
    :operator => 'ADD',
    :operand => ad_group_ad
  }
end

# Add ads.
response = ad_group_ad_srv.mutate(operations)
if response and response[:value]
  response[:value].each do |ad_group_ad|
    puts ('New expanded text ad with id "%d" and headline "%s - %s" was ' +
        'added.') % [ad_group_ad[:ad][:id], ad_group_ad[:ad][:headline_part1],
        ad_group_ad[:ad][:headline_part2]]
  end
else
  raise StandardError, 'No ads were added.'
end

Чтобы получить созданные объявления, вызовите AdGroupAdService.get() с фильтрацией по AdType EXPANDED_TEXT_AD в предикате.

Java

/**
 * Runs the example.
 *
 * @param adWordsServices the services factory.
 * @param session the session.
 * @param adGroupId the ID of the ad group to use to find expanded text ads.
 * @throws ApiException if the API request failed with one or more service errors.
 * @throws RemoteException if the API request failed due to other errors.
 */
public static void runExample(
    AdWordsServicesInterface adWordsServices, AdWordsSession session, Long adGroupId)
    throws RemoteException {
  // Get the AdGroupAdService.
  AdGroupAdServiceInterface adGroupAdService =
      adWordsServices.get(session, AdGroupAdServiceInterface.class);

  int offset = 0;
  boolean morePages = true;

  // Create selector.
  SelectorBuilder builder = new SelectorBuilder();
  Selector selector =
      builder
          .fields(
              AdGroupAdField.Id,
              AdGroupAdField.Status,
              AdGroupAdField.HeadlinePart1,
              AdGroupAdField.HeadlinePart2,
              AdGroupAdField.Description)
          .orderAscBy(AdGroupAdField.Id)
          .offset(offset)
          .limit(PAGE_SIZE)
          .equals(AdGroupAdField.AdGroupId, adGroupId.toString())
          .in(AdGroupAdField.Status, "ENABLED", "PAUSED")
          .equals("AdType", "EXPANDED_TEXT_AD")
          .build();

  while (morePages) {
    // Get all ads.
    AdGroupAdPage page = adGroupAdService.get(selector);

    // Display ads.
    if (page.getEntries() != null && page.getEntries().length > 0) {
      for (AdGroupAd adGroupAd : page.getEntries()) {
        ExpandedTextAd expandedTextAd = (ExpandedTextAd) adGroupAd.getAd();
        System.out.printf(
            "Expanded text ad with ID %d, status '%s', and headline '%s - %s' was found.%n",
            adGroupAd.getAd().getId(),
            adGroupAd.getStatus(),
            expandedTextAd.getHeadlinePart1(),
            expandedTextAd.getHeadlinePart2());
      }
    } else {
      System.out.println("No expanded text ads were found.");
    }

    offset += PAGE_SIZE;
    selector = builder.increaseOffsetBy(PAGE_SIZE).build();
    morePages = offset < page.getTotalNumEntries();
  }
}

C#

using (AdGroupAdService adGroupAdService =
    (AdGroupAdService) user.GetService(AdWordsService.v201802.AdGroupAdService)) {

  // Create a selector.
  Selector selector = new Selector() {
    fields = new string[] {
      ExpandedTextAd.Fields.Id, AdGroupAd.Fields.Status, ExpandedTextAd.Fields.HeadlinePart1,
      ExpandedTextAd.Fields.HeadlinePart2, ExpandedTextAd.Fields.Description, ExpandedTextAd.Fields.SystemManagedEntitySource
    },
    ordering = new OrderBy[] { OrderBy.Asc(ExpandedTextAd.Fields.Id) },
    predicates = new Predicate[] {
      // Restrict the fetch to only the selected ad group id.
      Predicate.Equals(AdGroupAd.Fields.AdGroupId, adGroupId),

      // Retrieve only expanded text ads.
      Predicate.Equals("AdType", "EXPANDED_TEXT_AD"),

      // By default disabled ads aren't returned by the selector. To return
      // them include the DISABLED status in the statuses field.
      Predicate.In(AdGroupAd.Fields.Status, new string[] {
        AdGroupAdStatus.ENABLED.ToString(),
        AdGroupAdStatus.PAUSED.ToString(),
        AdGroupAdStatus.DISABLED.ToString()
      })
    },
    paging = Paging.Default
  };

  AdGroupAdPage page = new AdGroupAdPage();

  try {
    do {
      // Get the expanded text ads.
      page = adGroupAdService.get(selector);

      // Display the results.
      if (page != null && page.entries != null) {
        int i = selector.paging.startIndex;

        foreach (AdGroupAd adGroupAd in page.entries) {
          ExpandedTextAd expandedTextAd = (ExpandedTextAd) adGroupAd.ad;
          Console.WriteLine("{0} : Expanded text ad with ID '{1}', headline '{2} - {3}' " +
              "and description '{4} was found.", i + 1, expandedTextAd.id,
              expandedTextAd.headlinePart1, expandedTextAd.headlinePart2,
              expandedTextAd.description);
          i++;
        }
      }
      selector.paging.IncreaseOffset();
    } while (selector.paging.startIndex < page.totalNumEntries);
    Console.WriteLine("Number of expanded text ads found: {0}", page.totalNumEntries);
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to get expanded text ads", e);
  }
}

PHP

public static function runExample(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    $adGroupId
) {
    $adGroupAdService = $adWordsServices->get($session, AdGroupAdService::class);

    // Create a selector to select all ads for the specified ad group.
    $selector = new Selector();
    $selector->setFields(
        ['Id', 'Status', 'HeadlinePart1', 'HeadlinePart2', 'Description']
    );
    $selector->setOrdering([new OrderBy('Id', SortOrder::ASCENDING)]);
    $selector->setPredicates(
        [
            new Predicate('AdGroupId', PredicateOperator::IN, [$adGroupId]),
            new Predicate(
                'AdType',
                PredicateOperator::IN,
                [AdType::EXPANDED_TEXT_AD]
            ),
            new Predicate(
                'Status',
                PredicateOperator::IN,
                [AdGroupAdStatus::ENABLED, AdGroupAdStatus::PAUSED]
            )
        ]
    );
    $selector->setPaging(new Paging(0, self::PAGE_LIMIT));

    $totalNumEntries = 0;
    do {
        // Retrieve ad group ads one page at a time, continuing to request pages
        // until all ad group ads have been retrieved.
        $page = $adGroupAdService->get($selector);

        // Print out some information for each ad group ad.
        if ($page->getEntries() !== null) {
            $totalNumEntries = $page->getTotalNumEntries();
            foreach ($page->getEntries() as $adGroupAd) {
                printf(
                    "Expanded text ad with ID %d, status '%s', and headline '%s - %s' was found.\n",
                    $adGroupAd->getAd()->getId(),
                    $adGroupAd->getStatus(),
                    $adGroupAd->getAd()->getHeadlinePart1(),
                    $adGroupAd->getAd()->getHeadlinePart2()
                );
            }
        }

        $selector->getPaging()->setStartIndex(
            $selector->getPaging()->getStartIndex() + self::PAGE_LIMIT
        );
    } while ($selector->getPaging()->getStartIndex() < $totalNumEntries);

    printf("Number of results found: %d\n", $totalNumEntries);
}

Perl

sub get_expanded_text_ads {
  my $client      = shift;
  my $ad_group_id = shift;

  # Create predicates.
  my $ad_group_predicate = Google::Ads::AdWords::v201802::Predicate->new({
      field    => "AdGroupId",
      operator => "IN",
      values   => [$ad_group_id]});
  my $status_predicate = Google::Ads::AdWords::v201802::Predicate->new({
      field    => "Status",
      operator => "IN",
      values   => ["ENABLED", "PAUSED"]});
  my $ad_type_predicate = Google::Ads::AdWords::v201802::Predicate->new({
      field    => "AdType",
      operator => "EQUALS",
      values   => ["EXPANDED_TEXT_AD"]});

  # Create selector.
  my $paging = Google::Ads::AdWords::v201802::Paging->new({
      startIndex    => 0,
      numberResults => PAGE_SIZE
  });
  my $selector = Google::Ads::AdWords::v201802::Selector->new({
      fields =>
        ["Id", "Status", "HeadlinePart1", "HeadlinePart2", "Description"],
      predicates =>
        [$ad_group_predicate, $status_predicate, $ad_type_predicate],
      ordering => [
        Google::Ads::AdWords::v201802::OrderBy->new({
            field     => "Id",
            sortOrder => "ASCENDING"
          })
      ],
      paging => $paging
    });

  # Paginate through results.
  # The contents of the subroutine will be executed for each text ad.
  Google::Ads::AdWords::Utilities::PageProcessor->new({
      client   => $client,
      service  => $client->AdGroupAdService(),
      selector => $selector
    }
    )->process_entries(
    sub {
      my ($ad_group_ad) = @_;
      printf "Expanded text ad with id \"%d\", status \"%s\", and " .
        "headline \"%s - %s\" was found.\n",
        $ad_group_ad->get_ad()->get_id(),
        $ad_group_ad->get_status(),
        $ad_group_ad->get_ad()->get_headlinePart1(),
        $ad_group_ad->get_ad()->get_headlinePart2();
    });

  return 1;
}

Python

def main(client, ad_group_id):
  # Initialize appropriate service.
  ad_group_ad_service = client.GetService('AdGroupAdService', version='v201802')

  # Construct selector and get all ads for a given ad group.
  offset = 0
  selector = {
      'fields': ['Id', 'AdGroupId', 'Status', 'HeadlinePart1', 'HeadlinePart2',
                 'Description'],
      'predicates': [
          {
              'field': 'AdGroupId',
              'operator': 'EQUALS',
              'values': [ad_group_id]
          },
          {
              'field': 'AdType',
              'operator': 'EQUALS',
              'values': ['EXPANDED_TEXT_AD']
          }
      ],
      'paging': {
          'startIndex': str(offset),
          'numberResults': str(PAGE_SIZE)
      },
      'ordering': [
          {
              'field': 'Id',
              'sortOrder': 'ASCENDING'
          }
      ]
  }
  more_pages = True
  while more_pages:
    page = ad_group_ad_service.get(selector)

    # Display results.
    if 'entries' in page:
      for ad in page['entries']:
        print ('ExpandedTextAd with id "%d", AdGroupId "%d", status "%s", '
               'headlinePart1 "%s", headlinePart2 "%s", description "%s" was '
               'found.' % (ad['ad']['id'], ad['adGroupId'], ad['status'],
                           ad['ad']['headlinePart1'], ad['ad']['headlinePart2'],
                           ad['ad']['description']))
    else:
      print 'No ads were found.'
    offset += PAGE_SIZE
    selector['paging']['startIndex'] = str(offset)
    more_pages = offset < int(page['totalNumEntries'])

Ruby

ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)

# Get all the ads for this ad group.
selector = {
  :fields => ['Id', 'Status', 'HeadlinePart1', 'HeadlinePart2',
      'Description'],
  :ordering => [{:field => 'Id', :sort_order => 'ASCENDING'}],
  # By default, disabled ads aren't returned by the selector. To return them,
  # include the DISABLED status in a predicate.
  :predicates => [
    {
      :field => 'AdGroupId',
      :operator => 'IN',
      :values => [ad_group_id]
    },
    {
      :field => 'Status',
      :operator => 'IN',
      :values => ['ENABLED', 'PAUSED']
    },
    {
      :field => 'AdType',
      :operator => 'EQUALS',
      :values => ['EXPANDED_TEXT_AD']
    }
  ],
  :paging => {
    :start_index => 0,
    :number_results => PAGE_SIZE
  }
}

# Set initial values.
offset, page = 0, {}

begin
  page = ad_group_ad_srv.get(selector)
  if page[:entries]
    page[:entries].each do |ad_group_ad|
      puts ('Expanded text ad with ID "%d", status "%s", and headline ' +
          '"%s - %s" was found.') % [ad_group_ad[:ad][:id],
          ad_group_ad[:status], ad_group_ad[:ad][:headline_part1],
          ad_group_ad[:ad][:headline_part2]]
    end
    # Increment values to request the next page.
    offset += PAGE_SIZE
    selector[:paging][:start_index] = offset
  end
end while page[:total_num_entries] > offset

if page.include?(:total_num_entries)
  puts "\tAd group ID %d has %d expanded text ad(s)." %
      [ad_group_id, page[:total_num_entries]]
end

Варианты объявлений

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

  • Если вы используете AdGroupAdService:

  • Если вы работаете с отчетами, найдите в отчете AD_PERFORMANCE_REPORT столбец SystemManagedEntitySource, в котором представлена та же информация, что и в карте прямой совместимости.

Отчеты

Развернутые текстовые объявления соответствуют значению AdType поля EXPANDED_TEXT_AD. Чтобы упростить получение данных, связанных с такими объявлениями, в отчете по эффективности объявлений используются следующие поля:

Советы по переходу на новый формат

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

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

  1. В режиме PAUSED создайте развернутое текстовое объявление на основе данных стандартного объявления. Обратите внимание, что длина строки description1 в стандартных текстовых объявлениях ограничена 35 символами, а длина headlinePart2 в развернутых объявлениях – 30 символами. Поэтому простое копирование из description1 в headlinePart2 приведет к ошибке.

  2. Дождитесь, пока approvalStatus развернутого текстового объявления не изменится на APPROVED.

  3. Если вы используете полностью автоматизированную стратегию назначения ставок на основе конверсий (целевую цену за конверсию или целевую рентабельность инвестиций в рекламу), рекомендуем вам переходить на развернутые текстовые объявления постепенно, некоторое время показывая их параллельно со стандартными.

  4. Отправьте запрос AdGroupAdService.mutate(), выполнив следующие две операции:

    • Для поля status развернутого текстового объявления установите значение ENABLED.
    • Для поля status стандартного текстового объявления установите значение DISABLED.

Если вы не знаете, как лучше выполнить переход или проведение экспериментов, начните со стандартных текстовых объявлений с наименьшей эффективностью и наблюдайте, как растет их CTR в новом формате.

Процесс перехода

Статистику перехода на новый формат можно проверять несколькими способами.

Уровень управляющего аккаунта – интерфейс AdWords

Войдите в управляющий аккаунт.

  • Нажмите Аккаунты.
  • На панели навигации слева нажмите Уведомления.
  • Выберите Фильтр > Создать фильтр.
  • В разделе Категория выберите Другие.
  • В разделе Тип выберите следующие 3 значения: "Начните изменять текстовые объявления", "Продолжите изменять текстовые объявления" и "Закончите изменять текстовые объявления".
  • Нажмите Применить.

В списке останутся аккаунты, в которых нужно выполнить переход, а также количество стандартных текстовых объявлений в каждом них.

Уровень клиентского аккаунта – интерфейс AdWords

Войдите в клиентский аккаунт AdWords.

  • Откройте вкладку Объявления.
  • Выберите Фильтр > Создать фильтр.
  • Добавьте фильтр Тип объявления и установите флажок Текстовое объявление.
  • Нажмите Применить.

В списке останутся только стандартные текстовые объявления.

Уровень клиентского аккаунта – API

Отфильтровать объявления по типу можно с помощью метода AdGroupAdService.get(). Чтобы получить список стандартных текстовых объявлений, добавьте фильтрацию AdType по параметру TEXT_AD. Начинайте с активных (ENABLED) или приостановленных (PAUSED) объявлений.

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

SELECT Id, Status, AdGroupId, AdGroupStatus, CampaignId, CampaignStatus
FROM AD_PERFORMANCE_REPORT
WHERE AdType = TEXT_AD AND Status != DISABLED
AND AdGroupStatus != REMOVED
AND CampaignStatus != REMOVED

ETA Transition Helper

С помощью инструмента ETA Transition Helper можно массово преобразовать стандартные текстовые объявления в развернутые.

Этот инструмент состоит из двух основных компонентов:

  1. Скрипт AdWords, который копирует стандартные текстовые объявления в документ Google Таблиц и добавляет развернутые текстовые объявления в аккаунт AdWords.

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

Примеры кода

Примеры полного кода можно найти по ссылкам ниже.

Оставить отзыв о...

Текущей странице
Нужна помощь? Обратитесь в службу поддержки.