Динамические поисковые объявления

С помощью динамических поисковых объявлений (ДПО) таргетинг рекламы можно настраивать на целые сайты или их разделы, не создавая отдельных рекламных текстов и списков ключевых слов для каждой целевой страницы. Каждый раз при вводе релевантного поискового запроса система динамически генерирует объявление с заголовком, соответствующим тексту запроса, и текстом объявления, связанным с содержанием наиболее релевантной страницы сайта. Затем такое объявление попадает на аукцион, где оно конкурирует с остальными объявлениями за возможность показа. Динамические объявления позволяют задействовать на аукционах большую часть инвентаря. При этом вам не нужно вносить изменения в уже существующие кампании с таргетингом на ключевые слова.

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

В этом руководстве описано, как создавать динамические поисковые объявления и работать с ними с помощью AdWords API.

Создание динамических поисковых объявлений

Чтобы настроить динамические поисковые объявления с помощью AdWords API, необходимо выполнить следующие действия:

  1. Настроить кампанию и указать для нее домен.
  2. Создать группу объявлений для функций, связанных с динамическими поисковыми объявлениями.
  3. Создать одно или несколько динамических поисковых объявлений.
  4. Задать в настройках кампании критерии для показа этих объявлений.

Создайте кампанию

Чтобы указать, что вы планируете использовать динамические поисковые объявления, нужно создать кампанию, в которой параметр advertisingChannelType имеет значение SEARCH. Кроме того, требуется указать домен, информация из которого будет использоваться для создания таких объявлений. Для этого задайте свойству settings объекта Campaign значение DynamicSearchAdsSetting.

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

C#

private static Campaign CreateCampaign(AdWordsUser user, Budget budget) {
  // Get the CampaignService.
  CampaignService campaignService =
    (CampaignService) user.GetService(AdWordsService.v201705.CampaignService);

  // Create a Dynamic Search Ads campaign.
  Campaign campaign = new Campaign();
  campaign.name = "Interplanetary Cruise #" + ExampleUtilities.GetRandomString();
  campaign.advertisingChannelType = AdvertisingChannelType.SEARCH;

  // Recommendation: Set the campaign to PAUSED when creating it to prevent
  // the ads from immediately serving. Set to ENABLED once you've added
  // targeting and the ads are ready to serve.
  campaign.status = CampaignStatus.PAUSED;

  BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();
  biddingConfig.biddingStrategyType = BiddingStrategyType.MANUAL_CPC;
  campaign.biddingStrategyConfiguration = biddingConfig;

  campaign.budget = new Budget();
  campaign.budget.budgetId = budget.budgetId;

  // Required: Set the campaign's Dynamic Search Ads settings.
  DynamicSearchAdsSetting dynamicSearchAdsSetting = new DynamicSearchAdsSetting();
  // Required: Set the domain name and language.
  dynamicSearchAdsSetting.domainName = "example.com";
  dynamicSearchAdsSetting.languageCode = "en";

  // Set the campaign settings.
  campaign.settings = new Setting[] { dynamicSearchAdsSetting };

  // Optional: Set the start date.
  campaign.startDate = DateTime.Now.AddDays(1).ToString("yyyyMMdd");

  // Optional: Set the end date.
  campaign.endDate = DateTime.Now.AddYears(1).ToString("yyyyMMdd");

  // Create the operation.
  CampaignOperation operation = new CampaignOperation();
  operation.@operator = Operator.ADD;
  operation.operand = campaign;

  try {
    // Add the campaign.
    CampaignReturnValue retVal = campaignService.mutate(new CampaignOperation[] { operation });

    // Display the results.
    Campaign newCampaign = retVal.value[0];
    Console.WriteLine("Campaign with id = '{0}' and name = '{1}' was added.",
      newCampaign.id, newCampaign.name);
    return newCampaign;
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to add campaigns.", e);
  }
}

Java

private static Campaign createCampaign(
    AdWordsServicesInterface adWordsServices, AdWordsSession session, Budget budget)
    throws RemoteException, ApiException {
  // Get the CampaignService.
  CampaignServiceInterface campaignService =
      adWordsServices.get(session, CampaignServiceInterface.class);

  // Create campaign.
  Campaign campaign = new Campaign();
  campaign.setName("Interplanetary Cruise #" + System.currentTimeMillis());
  campaign.setAdvertisingChannelType(AdvertisingChannelType.SEARCH);

  // Recommendation: Set the campaign to PAUSED when creating it to prevent
  // the ads from immediately serving. Set to ENABLED once you've added
  // targeting and the ads are ready to serve.
  campaign.setStatus(CampaignStatus.PAUSED);

  BiddingStrategyConfiguration biddingStrategyConfiguration = new BiddingStrategyConfiguration();
  biddingStrategyConfiguration.setBiddingStrategyType(BiddingStrategyType.MANUAL_CPC);
  campaign.setBiddingStrategyConfiguration(biddingStrategyConfiguration);

  // Only the budgetId should be sent, all other fields will be ignored by CampaignService.
  Budget campaignBudget = new Budget();
  campaignBudget.setBudgetId(budget.getBudgetId());
  campaign.setBudget(campaignBudget);

  // Required: Set the campaign's Dynamic Search Ads settings.
  DynamicSearchAdsSetting dynamicSearchAdsSetting = new DynamicSearchAdsSetting();
  // Required: Set the domain name and language.
  dynamicSearchAdsSetting.setDomainName("example.com");
  dynamicSearchAdsSetting.setLanguageCode("en");

  // Set the campaign settings.
  campaign.setSettings(new Setting[] {dynamicSearchAdsSetting});

  // Optional: Set the start date.
  campaign.setStartDate(new DateTime().plusDays(1).toString("yyyyMMdd"));
  // Optional: Set the end date.
  campaign.setEndDate(new DateTime().plusYears(1).toString("yyyyMMdd"));

  // Create the operation.
  CampaignOperation operation = new CampaignOperation();
  operation.setOperand(campaign);
  operation.setOperator(Operator.ADD);

  // Add the campaign.
  Campaign newCampaign = campaignService.mutate(new CampaignOperation[] {operation}).getValue(0);

  // Display the results.
  System.out.printf(
      "Campaign with name '%s' and ID %d was added.%n",
      newCampaign.getName(), newCampaign.getId());

  return newCampaign;
}

Python

campaign_service = client.GetService('CampaignService')

operations = [{
    'operator': 'ADD',
    'operand': {
        'name': 'Interplanetary Cruise #%d' % uuid.uuid4(),
        # Recommendation: Set the campaign to PAUSED when creating it to
        # prevent the ads from immediately serving. Set to ENABLED once you've
        # added targeting and the ads are ready to serve.
        'status': 'PAUSED',
        'advertisingChannelType': 'SEARCH',
        'biddingStrategyConfiguration': {
            'biddingStrategyType': 'MANUAL_CPC',
        },
        'budget': budget,
        # Required: Set the campaign's Dynamic Search Ad settings.
        'settings': [{
            'xsi_type': 'DynamicSearchAdsSetting',
            # Required: Set the domain name and language.
            'domainName': 'example.com',
            'languageCode': 'en'
        }],
        # Optional: Set the start date.
        'startDate': (datetime.datetime.now() +
                      datetime.timedelta(1)).strftime('%Y%m%d'),
        # Optional: Set the end date.
        'endDate': (datetime.datetime.now() +
                    datetime.timedelta(365)).strftime('%Y%m%d'),
    }
}]

campaign = campaign_service.mutate(operations)['value'][0]
campaign_id = campaign['id']

print 'Campaign with ID "%d" and name "%s" was added.' % (
    campaign_id, campaign['name'])

PHP

private static function createCampaign(AdWordsServices $adWordsServices,
    AdWordsSession $session, Budget $budget) {
  $campaignService = $adWordsServices->get($session, CampaignService::class);

  // Create campaign with some properties set.
  $campaign = new Campaign();
  $campaign->setName('Interplanetary Cruise #' . uniqid());
  $campaign->setAdvertisingChannelType(AdvertisingChannelType::SEARCH);

  // Recommendation: Set the campaign to PAUSED when creating it to prevent
  // the ads from immediately serving. Set to ENABLED once you've added
  // targeting and the ads are ready to serve.
  $campaign->setStatus(CampaignStatus::PAUSED);

  $biddingStrategyConfiguration = new BiddingStrategyConfiguration();
  $biddingStrategyConfiguration->setBiddingStrategyType(
      BiddingStrategyType::MANUAL_CPC);
  $campaign->setBiddingStrategyConfiguration($biddingStrategyConfiguration);

  // Only the budgetId should be sent, all other fields will be ignored by
  // CampaignService.
  $campaignBudget = new Budget();
  $campaignBudget->setBudgetId($budget->getBudgetId());
  $campaign->setBudget($campaignBudget);

  // Required: Set the campaign's Dynamic Search Ads settings.
  $dynamicSearchAdsSetting = new DynamicSearchAdsSetting();
  // Required: Set the domain name and language.
  $dynamicSearchAdsSetting->setDomainName('example.com');
  $dynamicSearchAdsSetting->setLanguageCode('en');

  // Set the campaign settings.
  $campaign->setSettings([$dynamicSearchAdsSetting]);

  // Optional: Set the start date.
  $campaign->setStartDate(date('Ymd', strtotime('+1 day')));
  // Optional: Set the end date.
  $campaign->setEndDate(date('Ymd', strtotime('+1 year')));

  // Create a campaign operation.
  $operation = new CampaignOperation();
  $operation->setOperand($campaign);
  $operation->setOperator(Operator::ADD);

  // Create the campaign on the server and print out some information.
  $result = $campaignService->mutate([$operation]);
  $campaign = $result->getValue()[0];
  printf("Campaign with name '%s' and ID %d was added.\n",
      $campaign->getName(), $campaign->getId());

  return $campaign;
}

Perl

# Creates the campaign.
sub _create_campaign {
  my ($client, $budget) = @_;

  # Required: Set the campaign's Dynamic Search Ads settings.
  my $dynamic_search_ads_setting =
    Google::Ads::AdWords::v201705::DynamicSearchAdsSetting->new({
      # Required: Set the domain name and language.
      domainName   => "example.com",
      languageCode => "en"
    });

  # Calculating a start date of today and an end date 1 year from now.
  my (undef, undef, undef, $mday, $mon, $year) = localtime(time + 60 * 60 * 24);
  my $start_date = sprintf("%d%02d%02d", ($year + 1900), ($mon + 1), $mday);
  (undef, undef, undef, $mday, $mon, $year) =
    localtime(time + 60 * 60 * 24 * 365);
  my $end_date = sprintf("%d%02d%02d", ($year + 1900), ($mon + 1), $mday);

  my $campaign = Google::Ads::AdWords::v201705::Campaign->new({
      name => sprintf("Interplanetary Cruise #%s", uniqid()),
      biddingStrategyConfiguration =>
        Google::Ads::AdWords::v201705::BiddingStrategyConfiguration->new({
          biddingStrategyType => "MANUAL_CPC"
        }
        ),
      # Only the budgetId should be sent, all other fields will be ignored by
      # CampaignService.
      budget => Google::Ads::AdWords::v201705::Budget->new(
        {budgetId => $budget->get_budgetId()}
      ),
      advertisingChannelType => "SEARCH",
      settings               => [$dynamic_search_ads_setting],
      # Additional properties (non-required).
      startDate => $start_date,
      endDate   => $end_date,
      # Recommendation: Set the campaign to PAUSED when creating it to stop
      # the ads from immediately serving. Set to ENABLED once you've added
      # targeting and the ads are ready to serve.
      status => "PAUSED"
    });

  # Create operation.
  my $campaign_operation =
    Google::Ads::AdWords::v201705::CampaignOperation->new({
      operator => "ADD",
      operand  => $campaign
    });

  # Add campaigns.
  my $result =
    $client->CampaignService()->mutate({operations => [$campaign_operation]});

  # Display campaigns.
  my $new_campaign = $result->get_value()->[0];
  printf "Campaign with name '%s' and ID %d was added.\n",
    $new_campaign->get_name(),
    $new_campaign->get_id();
  return $new_campaign;
}

Ruby

def create_campaign(adwords, budget)
  campaign_srv = adwords.service(:CampaignService, API_VERSION)

  campaign = {
    :name => "Interplanetary Cruise #%d" % (Time.now.to_f * 1000).to_i,
    :advertising_channel_type => 'SEARCH',
    # Recommendation: Set the campaign to PAUSED when creating it to prevent the
    # ads from immediately serving. Set to ENABLED once you've added targeting
    # and the ads are ready to serve.
    :status => 'PAUSED',
    :bidding_strategy_configuration => {
      :bidding_strategy_type => 'MANUAL_CPC'
    },
    # Only the budgetId should be sent; all other fields will be ignored by
    # CampaignService.
    :budget => {
      :budget_id => budget[:budget_id]
    },
    :settings => [
      :xsi_type => 'DynamicSearchAdsSetting',
      :domain_name => 'example.com',
      :language_code => 'en'
    ],
    # Optional: Set the start and end dates.
    :start_date => DateTime.parse((Date.today + 1).to_s).strftime('%Y%m%d'),
    :end_date => DateTime.parse(Date.today.next_year.to_s).strftime('%Y%m%d')
  }

  operation = {
    :operand => campaign,
    :operator => 'ADD'
  }

  new_campaign = campaign_srv.mutate([operation])[:value].first
  puts "Campaign with name '%s' and ID %d was added." %
      [new_campaign[:name], new_campaign[:id]]

  return new_campaign
end

Отключение динамических поисковых объявлений

Динамические поисковые объявления можно отключить на уровне кампании, не приостанавливая ее. Для этого достаточно обновить значения параметра DynamicSearchAdsSetting, а параметру domainName присвоить значение "-". Также требуется указать код языка.

Создайте группу объявлений

В AdWords API версии 201705 появился новый тип групп объявлений, созданный специально для динамической поисковой рекламы. У них параметр adGroupType имеет значение AdGroupType.SEARCH_DYNAMIC_ADS. При использовании этих групп есть некоторые особенности:

  • Их можно добавлять только в кампании в поисковой сети.
  • Параметр DynamicSearchAdsSetting на уровне кампании должен иметь действительное значение. Если это не так, отображается ошибка AdGroupServiceError.CANNOT_ADD_ADGROUP_OF_TYPE_DSA_TO_CAMPAIGN_WITHOUT_DSA_SETTING.
  • В них запрещено использовать ключевые слова. Разрешены цели динамической рекламы, аудитории и минус-слова.
  • Как и во всех группах объявлений, в них нельзя менять параметр adGroupType после создания.
  • В них разрешено использовать только те форматы объявлений, которые связаны с динамическими поисковыми объявлениями.

Вот пример кода, создающего группу объявлений типа SEARCH_DYNAMIC_ADS:

C#

private static AdGroup CreateAdGroup(AdWordsUser user, long campaignId) {
  // Get the AdGroupService.
  AdGroupService adGroupService =
      (AdGroupService) user.GetService(AdWordsService.v201705.AdGroupService);

  // Create the ad group.
  AdGroup adGroup = new AdGroup();

  // Required: Set the ad group's type to Dynamic Search Ads.
  adGroup.adGroupType = AdGroupType.SEARCH_DYNAMIC_ADS;

  adGroup.name = string.Format("Earth to Mars Cruises #{0}",
    ExampleUtilities.GetRandomString());
  adGroup.campaignId = campaignId;
  adGroup.status = AdGroupStatus.PAUSED;

  // Recommended: Set a tracking URL template for your ad group if you want to use URL
  // tracking software.
  adGroup.trackingUrlTemplate = "http://tracker.example.com/traveltracker/{escapedlpurl}";

  // Set the ad group bids.
  BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();

  CpcBid cpcBid = new CpcBid();
  cpcBid.bid = new Money();
  cpcBid.bid.microAmount = 3000000;

  biddingConfig.bids = new Bids[] { cpcBid };

  adGroup.biddingStrategyConfiguration = biddingConfig;

  // Create the operation.
  AdGroupOperation operation = new AdGroupOperation();
  operation.@operator = Operator.ADD;
  operation.operand = adGroup;

  try {
    // Create the ad group.
    AdGroupReturnValue retVal = adGroupService.mutate(new AdGroupOperation[] { operation });

    // Display the results.
    AdGroup newAdGroup = retVal.value[0];
    Console.WriteLine("Ad group with id = '{0}' and name = '{1}' was created.",
      newAdGroup.id, newAdGroup.name);
    return newAdGroup;
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to create ad group.", e);
  }
}

Java

private static AdGroup createAdGroup(
    AdWordsServicesInterface adWordsServices, AdWordsSession session, Campaign campaign)
    throws ApiException, RemoteException {
  // Get the AdGroupService.
  AdGroupServiceInterface adGroupService =
      adWordsServices.get(session, AdGroupServiceInterface.class);

  // Create the ad group.
  AdGroup adGroup = new AdGroup();

  // Required: Set the ad group's type to Dynamic Search Ads.
  adGroup.setAdGroupType(AdGroupType.SEARCH_DYNAMIC_ADS);

  adGroup.setName("Earth to Mars Cruises #" + System.currentTimeMillis());
  adGroup.setCampaignId(campaign.getId());
  adGroup.setStatus(AdGroupStatus.PAUSED);

  // Recommended: Set a tracking URL template for your ad group if you want to use URL
  // tracking software.
  adGroup.setTrackingUrlTemplate("http://tracker.example.com/traveltracker/{escapedlpurl}");

  // Set the ad group bids.
  BiddingStrategyConfiguration biddingConfig = new BiddingStrategyConfiguration();

  CpcBid cpcBid = new CpcBid();
  cpcBid.setBid(new Money());
  cpcBid.getBid().setMicroAmount(3000000L);

  biddingConfig.setBids(new Bids[] {cpcBid});

  adGroup.setBiddingStrategyConfiguration(biddingConfig);

  // Create the operation.
  AdGroupOperation operation = new AdGroupOperation();
  operation.setOperand(adGroup);
  operation.setOperator(Operator.ADD);

  AdGroup newAdGroup = adGroupService.mutate(new AdGroupOperation[] {operation}).getValue(0);
  System.out.printf(
      "Ad group with name '%s' and ID %d was added.%n", newAdGroup.getName(), newAdGroup.getId());
  return newAdGroup;
}

Python

ad_group_service = client.GetService('AdGroupService')

operations = [{
    'operator': 'ADD',
    'operand': {
        'campaignId': campaign_id,
        'adGroupType': 'SEARCH_DYNAMIC_ADS',
        'name': 'Earth to Mars Cruises #%d' % uuid.uuid4(),
        'status': 'PAUSED',
        'biddingStrategyConfiguration': {
            'bids': [{
                'xsi_type': 'CpcBid',
                'bid': {
                    'microAmount': '3000000'
                },
            }]
        }
    }
}]

ad_group = ad_group_service.mutate(operations)['value'][0]
ad_group_id = ad_group['id']

print 'Ad group with ID "%d" and name "%s" was created.' % (
    ad_group_id, ad_group['name'])

PHP

private static function createAdGroup(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    Campaign $campaign
) {
  $adGroupService = $adWordsServices->get($session, AdGroupService::class);

  // Create the ad group.
  $adGroup = new AdGroup();

  // Required: Set the ad group's type to Dynamic Search Ads.
  $adGroup->setAdGroupType(AdGroupType::SEARCH_DYNAMIC_ADS);

  $adGroup->setName('Interplanetary Cruise #' . uniqid());
  $adGroup->setCampaignId($campaign->getId());
  $adGroup->setStatus(AdGroupStatus::PAUSED);

  // Recommended: Set a tracking URL template for your ad group if you want to
  // use URL tracking software.
  $adGroup->setTrackingUrlTemplate(
      'http://tracker.example.com/traveltracker/{escapedlpurl}');

  // Set the ad group bids.
  $biddingStrategyConfiguration = new BiddingStrategyConfiguration();

  $cpcBid = new CpcBid();
  $money = new Money();
  $money->setMicroAmount(3000000);
  $cpcBid->setBid($money);
  $biddingStrategyConfiguration->setBids([$cpcBid]);

  $adGroup->setBiddingStrategyConfiguration($biddingStrategyConfiguration);

  // Create an ad group operation.
  $operation = new AdGroupOperation();
  $operation->setOperand($adGroup);
  $operation->setOperator(Operator::ADD);

  // Create the ad group on the server and print out some information.
  $result = $adGroupService->mutate([$operation]);
  $adGroup = $result->getValue()[0];
  printf("Ad group with name '%s' and ID %d was added.\n",
      $adGroup->getName(), $adGroup->getId());

  return $adGroup;
}

Perl

# Creates the ad group.
sub _create_ad_group {
  my ($client, $campaign) = @_;

  my $ad_group = Google::Ads::AdWords::v201705::AdGroup->new({
      name       => sprintf("Earth to Mars Cruises #%s", uniqid()),
      campaignId => $campaign->get_id(),
      # Required: Set the ad group's type to Dynamic Search Ads.
      adGroupType => "SEARCH_DYNAMIC_ADS",
      status      => "PAUSED",
      # Recommended: Set a tracking URL template for your ad group if you want
      # to use URL tracking software.
      trackingUrlTemplate =>
        "http://tracker.example.com/traveltracker/{escapedlpurl}",
      biddingStrategyConfiguration =>
        Google::Ads::AdWords::v201705::BiddingStrategyConfiguration->new({
          bids => [
            Google::Ads::AdWords::v201705::CpcBid->new({
                bid => Google::Ads::AdWords::v201705::Money->new(
                  {microAmount => 3000000}
                ),
              }
            ),
          ]})});

  # Create operation.
  my $ad_group_operation =
    Google::Ads::AdWords::v201705::AdGroupOperation->new({
      operator => "ADD",
      operand  => $ad_group
    });

  my $result =
    $client->AdGroupService()->mutate({operations => [$ad_group_operation]});
  my $new_ad_group = $result->get_value()->[0];
  printf "Ad group with name '%s' and ID %d was added.\n",
    $new_ad_group->get_name(), $new_ad_group->get_id();
  return $new_ad_group;
}

Ruby

def create_ad_group(adwords, campaign)
  ad_group_srv = adwords.service(:AdGroupService, API_VERSION)

  ad_group = {
    # Required: Set the ad group's tpe to Dynamic Search Ads.
    :ad_group_type => 'SEARCH_DYNAMIC_ADS',
    :name => "Earth to Mars Cruises #%d" % (Time.now.to_f * 1000).to_i,
    :campaign_id => campaign[:id],
    :status => 'PAUSED',
    # Recommended: Set a tracking URL template for your ad group if you want to
    # use URL tracking software.
    :tracking_url_template =>
        'http://tracker.example.com/traveltracker/{escapedlpurl}',
    :bidding_strategy_configuration => {
      :bids => [{
        :xsi_type => 'CpcBid',
        :bid => {
          :micro_amount => 3_000_000
        }
      }]
    }
  }

  operation = {
    :operand => ad_group,
    :operator => 'ADD'
  }

  new_ad_group = ad_group_srv.mutate([operation])[:value].first
  puts "Ad group with name '%s' and ID %d was added." %
      [new_ad_group[:name], new_ad_group[:id]]

  return new_ad_group
end

Создание динамических поисковых объявлений

Следующим шагом станет создание объекта ExpandedDynamicSearchAd. У этого объявления есть заголовок, отображаемый URL и конечный URL. Последний создается во время отображения на основе сведений об имени домена, заданных в параметре DynamicSearchAdsSetting на уровне кампании. Вам также нужно указать для объявления значение параметра description.

C#

private static ExpandedDynamicSearchAd CreateExpandedDSA(AdWordsUser user, long adGroupId) {
  // Get the AdGroupAdService.
  AdGroupAdService service =
    (AdGroupAdService) user.GetService(AdWordsService.v201705.AdGroupAdService);

  // Create an Expanded Dynamic Search Ad. This ad will have its headline, display URL and
  // final URL auto-generated at serving time according to domain name specific information
  // provided by DynamicSearchAdsSetting at the campaign level.
  ExpandedDynamicSearchAd expandedDSA = new ExpandedDynamicSearchAd();
  // Set the ad description.
  expandedDSA.description = "Buy your tickets now!";

  // Create the ad group ad.
  AdGroupAd adGroupAd = new AdGroupAd();
  adGroupAd.adGroupId = adGroupId;
  adGroupAd.ad = expandedDSA;

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

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

  try {
    // Create the ad.
    AdGroupAdReturnValue retval = service.mutate(new AdGroupAdOperation[] { operation });

    // Display the results.
    AdGroupAd newAdGroupAd = retval.value[0];
    ExpandedDynamicSearchAd newAd = newAdGroupAd.ad as ExpandedDynamicSearchAd;
    Console.WriteLine("Expanded Dynamic Search Ad with ID '{0}' and description '{1}' " +
        "was added.", newAd.id, newAd.description);
    return newAd;
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to create Expanded Dynamic Search Ad.", e);
  }
}

Java

private static void createExpandedDSA(
    AdWordsServicesInterface adWordsServices, AdWordsSession session, AdGroup adGroup)
    throws ApiException, RemoteException {
  // Get the AdGroupAdService.
  AdGroupAdServiceInterface adGroupAdService =
      adWordsServices.get(session, AdGroupAdServiceInterface.class);

  // Create the expanded Dynamic Search Ad. This ad will have its headline and final URL
  // auto-generated at serving time according to domain name specific information provided
  // by DynamicSearchAdsSetting at the campaign level.
  ExpandedDynamicSearchAd expandedDSA = new ExpandedDynamicSearchAd();
  // Set the ad description.
  expandedDSA.setDescription("Buy your tickets now!");

  // Create the ad group ad.
  AdGroupAd adGroupAd = new AdGroupAd();
  adGroupAd.setAdGroupId(adGroup.getId());
  adGroupAd.setAd(expandedDSA);

  // Optional: Set the status.
  adGroupAd.setStatus(AdGroupAdStatus.PAUSED);

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

  // Create the ad.
  AdGroupAd newAdGroupAd =
      adGroupAdService.mutate(new AdGroupAdOperation[] {operation}).getValue(0);
  ExpandedDynamicSearchAd newExpandedDSA = (ExpandedDynamicSearchAd) newAdGroupAd.getAd();
  System.out.printf(
      "Expanded Dynamic Search Ad with ID %d and description '%s' was added.%n",
      newExpandedDSA.getId(), newExpandedDSA.getDescription());
}

Python

# Get the AdGroupAdService.
ad_group_ad_service = client.GetService('AdGroupAdService')

# Create the operation
operations = [{
    'operator': 'ADD',
    'operand': {
        'xsi_type': 'AdGroupAd',
        'adGroupId': ad_group_id,
        # Create the expanded dynamic search ad. This ad will have its
        # headline and final URL auto-generated at serving time according to
        # domain name specific information provided by DynamicSearchAdsSetting
        # at the campaign level.
        'ad': {
            'xsi_type': 'ExpandedDynamicSearchAd',
            # Set the ad description.
            'description': 'Buy your tickets now!'
        },
        # Optional: Set the status.
        'status': 'PAUSED',
    }
}]

# Create the ad.
ad = ad_group_ad_service.mutate(operations)['value'][0]['ad']

# Display the results.
print ('Expanded dynamic search ad with ID "%d" and description "%s" was '
       'added' % (ad['id'], ad['description']))

PHP

private static function createExpandedDSA(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    AdGroup $adGroup
) {
  $adGroupAdService
      = $adWordsServices->get($session, AdGroupAdService::class);

  // Create the expanded Dynamic Search Ad. This ad will have its headline
  // and final URL auto-generated at serving time according to domain name
  // specific information provided by DynamicSearchAdsSetting at the
  // campaign level.
  $expandedDSA = new ExpandedDynamicSearchAd();
  // Set the ad description.
  $expandedDSA->setDescription('Buy your tickets now!');

  // Create the ad group ad.
  $adGroupAd = new AdGroupAd();
  $adGroupAd->setAdGroupId($adGroup->getId());
  $adGroupAd->setAd($expandedDSA);

  // Optional: Set the status.
  $adGroupAd->setStatus(AdGroupAdStatus::PAUSED);

  // Create the operation.
  $operation = new AdGroupAdOperation();
  $operation->setOperator(Operator::ADD);
  $operation->setOperand($adGroupAd);

  // Create the ad on the server and print some information.
  $result = $adGroupAdService->mutate([$operation]);
  $newAdGroupAd = $result->getValue()[0];
  $expandedDSA = $newAdGroupAd->getAd();
  printf(
      "Expanded Dynamic Search Ad with ID %d and description '%s' was"
          . " added.\n",
      $expandedDSA->getId(),
      $expandedDSA->getDescription()
  );
}

Perl

# Creates the expanded Dynamic Search Ad.
sub _create_expanded_DSA {
  my ($client, $ad_group) = @_;
  # Create the expanded Dynamic Search Ad. This ad will have its headline and
  # final URL auto-generated at serving time according to domain name specific
  # information provided by DynamicSearchAdsSetting at the campaign level.
  my $expanded_DSA =
    Google::Ads::AdWords::v201705::ExpandedDynamicSearchAd->new({
      # Set the ad description.
      description => "Buy your tickets now!",
    });

  # Create the ad group ad.
  my $ad_group_ad = Google::Ads::AdWords::v201705::AdGroupAd->new({
    adGroupId => $ad_group->get_id(),
    ad        => $expanded_DSA,
    # Optional: Set the status.
    status => "PAUSED"
  });

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

  my $result =
    $client->AdGroupAdService()->mutate({operations => [$operation]});
  my $new_ad_group_ad = $result->get_value()->[0];
  my $new_expanded_dsa = $new_ad_group_ad->get_ad();
  printf
    "Expanded Dynamic Search Ad with ID %d and description '%s' was added.\n",
    $new_expanded_dsa->get_id(), $new_expanded_dsa->get_description();
}

Ruby

def create_expanded_dsa(adwords, ad_group)
  ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)

  # Create the expanded Dynamic Search Ad. This ad will have its headline and
  # final URL auto-generated at serving time according to domain name specific
  # information provided by DynamicSearchAdsSetting at the campaign level.
  expanded_dsa = {
    :xsi_type => 'ExpandedDynamicSearchAd',
    :description => 'Buy your tickets now!'
  }

  ad_group_ad = {
    :ad_group_id => ad_group[:id],
    :ad => expanded_dsa,
    # Optional: Set the status.
    :status => 'PAUSED'
  }

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

  new_ad_group_ad = ad_group_ad_srv.mutate([operation])[:value].first
  new_expanded_dsa = new_ad_group_ad[:ad]
  puts "Expanded Dynamic Search Ad with ID %d and description '%s' was added." %
      [new_expanded_dsa[:id], new_expanded_dsa[:description]]
end

Содержание поля finalUrls в динамических поисковых объявлениях генерируется AdWords, поэтому задать его самостоятельно нельзя. Если вы хотите использовать программное обеспечение для отслеживания URL, укажите дополнительные параметры отслеживания или переадресации в поле trackingUrlTemplate. Чтобы система AdWords могла собирать статистику по конечным URL, в это поле необходимо включить один из следующих параметров:

Параметр Описание
{unescapedlpurl}

URL целевой страницы без экранирования, к которому будут добавляться суффиксы. Пример:

{unescapedlpurl}?dsa=true

{escapedlpurl}

URL целевой страницы с экранированием (кодировкой), применяемый для переадресации на счетчики. Пример:

http://tracking.com/lp={escapedurl}

{lpurlpath}

Параметры пути и запроса в вычисленном URL. Пример:

http://tracking.com.com/track/{lpurlpath}

{lpurl}

Зашифровывает ? и = в URL целевой страницы, оканчивается поисковым запросом. Если указать его в самом начале поля trackingUrlTemplate, то он будет заменен значением {unescapedurl}. Пример:

http://tracking.com/redir.php?tracking=xyz&url={lpurl}

Примеры:

dsa.setTrackingUrlTemplate("http://example.org/traveltracker/{escapedlpurl}");

Задание критериев динамического поискового объявления

Задать критерии показа динамических поисковых объявлений можно с помощью объекта критерия Webpage.

Для этого к критерию Webpage нужно добавить объект WebpageParameter, содержащий от одного до трех условий WebpageConditions. С помощью этого объекта вы сможете точно определить условия фильтрации и поиска в пределах домена, указанного ранее в настройках кампании.

В домене можно применять четыре типа условий фильтрации:

WebPageConditionOperand Описание
URL Частичное совпадение с URL страницы.
CATEGORY Точное совпадение с категорией.
PAGE_TITLE Частичное совпадение с заголовком страницы.
PAGE_CONTENT Совпадение с контентом на любой из индексированных страниц.
CUSTOM_LABEL Совпадение с условием таргетинга на метку продавца веб-страницы.

В качестве примера создадим условие, позволяющее сопоставлять поисковые запросы с контентом страниц, содержащих в названии фразу Special Offer (Специальные предложения) и относящихся к разделу /children нашего сайта о турах на Марс.

Определение категорий сайта

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

DataServiceInterface dataService =
  adWordsServices.get(session, DataServiceInterface.class);

// Create selector.
SelectorBuilder builder = new SelectorBuilder();
Selector selector = builder
    .fields("DomainName", "Category", "IsoLanguage")
    .equals("DomainName", "example.org")
    .equals("CampaignId", campaignId)
    .limit(PAGE_SIZE)
    .build();

DomainCategoryPage page = dataService.getDomainCategory(selector);

Исключение разделов сайта

Задать критерии исключения для сайта Webpage можно с помощью объекта AdGroupCriterionService. Ниже показано, как исключить страницы с определенными словами в заголовке (чтобы, например, осуществлять таргетинг на эти страницы в другой кампании или группе объявлений).

Прочие критерии

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

Фиды страниц с динамическими поисковыми объявлениями

Таргетинг динамических поисковых объявлений по умолчанию настроен на целые сайты или их разделы, но не на отдельные страницы. Если вы хотите указать конкретные URL, используйте фиды страниц с динамическими поисковыми объявлениями. Фид целевых страниц товаров, содержащий перечень их URL, позволит AdWords точнее настраивать показ объявлений пользователям, заинтересованным в переходе на ту или иную страницу товара на вашем сайте.

Вот как настроить фид страницы с динамическими поисковыми объявлениями:

  1. Создайте фид и укажите в нем URL страниц.
  2. Настройте кампанию так, чтобы в ней использовался фид страниц динамических поисковых объявлений.
  3. Мы рекомендуем добавлять к URL в фиде метки продавца. Так вам будет проще категоризировать цели динамической рекламы и управлять ими.

Создание фида страниц

В первую очередь при работе над фидом страниц необходимо создать фид с параметром criterionType = 61. Эта процедура похожа на ту, которая описана в нашем руководстве по работе с фидами, но имеет несколько отличий:

  1. В случае с фидом страниц вам достаточно создать фид, указать объекты и сопоставить фид с полями тегов фида страниц.
  2. Фиды страниц с динамичными поисковыми объявлениями содержат поле criterionType, а не placeholderType.

Пример можно найти в разделе образцов кода.

Настройка кампании для фидов страниц

Чтобы настроить кампанию с фидами страниц, задайте параметру DynamicSearchAdSetting значение pagefeed.

Для начала получите для кампании параметр DynamicSearchAdSetting.

C#

// Get the CampaignService.
CampaignService campaignService = (CampaignService) user.GetService(
    AdWordsService.v201705.CampaignService);

Selector selector = new Selector() {
  fields = new string[] { Campaign.Fields.Id, Campaign.Fields.Settings },
  predicates = new Predicate[]{
    Predicate.Equals(Campaign.Fields.Id, campaignId)
  },
  paging = Paging.Default
};

CampaignPage page = campaignService.get(selector);

if (page == null || page.entries == null || page.entries.Length == 0) {
  throw new System.ApplicationException(string.Format(
      "Failed to retrieve campaign with ID = {0}.", campaignId));
}
Campaign campaign = page.entries[0];

if (campaign.settings == null) {
  throw new System.ApplicationException("This is not a DSA campaign.");
}

DynamicSearchAdsSetting dsaSetting = null;
Setting[] campaignSettings = campaign.settings;

for (int i = 0; i < campaign.settings.Length; i++) {
  Setting setting = campaignSettings[i];
  if (setting is DynamicSearchAdsSetting) {
    dsaSetting = (DynamicSearchAdsSetting) setting;
    break;
  }
}

if (dsaSetting == null) {
  throw new System.ApplicationException("This is not a DSA campaign.");
}

Java

// Get the CampaignService.
CampaignServiceInterface campaignService =
    adWordsServices.get(session, CampaignServiceInterface.class);

Selector selector =
    new SelectorBuilder()
        .fields(CampaignField.Id, CampaignField.Settings)
        .equalsId(campaignId)
        .build();

CampaignPage campaignPage = campaignService.get(selector);
if (campaignPage.getEntries() == null || campaignPage.getTotalNumEntries() == 0) {
  throw new IllegalArgumentException("No campaign found with ID: " + campaignId);
}
Campaign campaign = campaignPage.getEntries(0);

if (campaign.getSettings() == null) {
  throw new IllegalArgumentException(
      "Campaign with ID " + campaignId + " is not a DSA campaign.");
}

DynamicSearchAdsSetting dsaSetting = null;
for (Setting setting : campaign.getSettings()) {
  if (setting instanceof DynamicSearchAdsSetting) {
    dsaSetting = (DynamicSearchAdsSetting) setting;
    break;
  }
}

if (dsaSetting == null) {
  throw new IllegalArgumentException(
      "Campaign with ID " + campaignId + " is not a DSA campaign.");
}

Python

# Get the CampaignService.
campaign_service = client.GetService('CampaignService', version='v201705')

selector = {
    'fields': ['Id', 'Settings'],
    'predicates': [{
        'field': 'Id',
        'operator': 'EQUALS',
        'values': [campaign_id]
    }]
}

response = campaign_service.get(selector)

if response['totalNumEntries']:
  campaign = response['entries'][0]
else:
  raise ValueError('No campaign with ID "%d" exists.' % campaign_id)

if not campaign['settings']:
  raise ValueError('This is not a DSA campaign.')

dsa_setting = None

campaign_settings = campaign['settings']

for setting in campaign_settings:
  if setting['Setting.Type'] == 'DynamicSearchAdsSetting':
    dsa_setting = setting
    break

if dsa_setting is None:
  raise ValueError('This is not a DSA campaign.')
    

PHP

$campaignService = $adWordsServices->get($session, CampaignService::class);

// Create selector.
$selector = new Selector();
$selector->setFields(['Id', 'Settings']);
$selector->setPredicates(
    [new Predicate('CampaignId', PredicateOperator::IN, [$campaignId])]);

$result = $campaignService->get($selector);
if (empty($result->getEntries()) || $result->getTotalNumEntries() === 0) {
  throw new InvalidArgumentException(
      'No campaign found with ID: ' . $campaignId);
}
$campaign = $result->getEntries()[0];

if ($campaign->getSettings() === null) {
  throw new InvalidArgumentException(
      'Campaign with ID ' . $campaignId . ' is not a DSA campaign.');
}

$dsaSetting = null;
foreach ($campaign->getSettings() as $setting) {
  if ($setting instanceof DynamicSearchAdsSetting) {
    $dsaSetting = $setting;
    break;
  }
}

if ($dsaSetting === null) {
  throw new InvalidArgumentException(
      'Campaign with ID ' . $campaignId . ' is not a DSA campaign.');
}
    

Perl

my $paging = Google::Ads::AdWords::v201705::Paging->new({
  startIndex    => 0,
  numberResults => PAGE_SIZE
});
my $selector = Google::Ads::AdWords::v201705::Selector->new({
    fields     => ["Id", "Settings"],
    predicates => [
      Google::Ads::AdWords::v201705::Predicate->new({
          field    => "CampaignId",
          operator => "EQUALS",
          values   => [$campaign_id]})
    ],
    paging => $paging
  });

my $dsa_setting = undef;
Google::Ads::AdWords::Utilities::PageProcessor->new({
    client   => $client,
    service  => $client->CampaignService(),
    selector => $selector
  }
  )->process_entries(
  sub {
    my ($campaign) = @_;
    if ($campaign->get_settings()) {
      foreach my $setting (@{$campaign->get_settings()}) {
        if (
          $setting->isa(
            "Google::Ads::AdWords::v201705::DynamicSearchAdsSetting"))
        {
          $dsa_setting = $setting;
          last;
        }
      }
    }
  });

if (!$dsa_setting) {
  die sprintf("Campaign with ID %s is not a DSA campaign.", $campaign_id);
}
    

Ruby

campaign_srv = adwords.service(:CampaignService, API_VERSION)

selector = {
  :fields => ['Id', 'Settings'],
  :predicates => [
    {:field => 'CampaignId', :operator => 'IN', :values => [campaign_id]}
  ]
}

campaign_page = campaign_srv.get(selector)
if campaign_page.nil? or campaign_page[:entries].nil? or
    campaign_page[:total_num_entries] == 0
  raise 'No campaign found with ID: %d' % campaign_id
end

campaign = campaign_page[:entries].first

if campaign[:settings].nil?
  raise 'Campaign with ID %d is not a DSA campaign.' % campaign_id
end

dsa_setting = nil
campaign[:settings].each do |setting|
  if setting[:setting_type] == 'DynamicSearchAdsSetting'
    dsa_setting = setting
    break
  end
end

if dsa_setting.nil?
  raise 'Campaign with ID %d is not a DSA campaign.' % campaign_id
end
    

Затем настройте фиды страниц, задав значение feedIds в разделе pageFeed для параметра DynamicSearchAdsSetting. Вы также можете использовать поле useSuppliedUrlsOnly, чтобы отметить, следует ли применять для динамических поисковых объявлений только указанные URL.

C#

// Use a page feed to specify precisely which URLs to use with your
// Dynamic Search Ads.
dsaSetting.pageFeed = new PageFeed() {
  feedIds = new long[] {
    feedId
  },
};

// Optional: Specify whether only the supplied URLs should be used with your
// Dynamic Search Ads.
dsaSetting.useSuppliedUrlsOnly = true;

Campaign campaignToUpdate = new Campaign();
campaignToUpdate.id = campaignId;
campaignToUpdate.settings = campaignSettings;

CampaignOperation operation = new CampaignOperation();
operation.operand = campaignToUpdate;
operation.@operator = Operator.SET;

try {
  CampaignReturnValue retval = campaignService.mutate(new CampaignOperation[] { operation });
  Campaign updatedCampaign = retval.value[0];
  Console.WriteLine("DSA page feed for campaign ID '{0}' was updated with feed ID '{1}'.",
      updatedCampaign.id, feedId);
} catch (Exception e) {
  throw new System.ApplicationException("Failed to set page feed for campaign.", e);
}

Java

// Use a page feed to specify precisely which URLs to use with your
// Dynamic Search Ads.
PageFeed pageFeed = new PageFeed();
pageFeed.setFeedIds(new long[] {feedDetails.feedId});
dsaSetting.setPageFeed(pageFeed);

// Optional: Specify whether only the supplied URLs should be used with your
// Dynamic Search Ads.
dsaSetting.setUseSuppliedUrlsOnly(true);

Campaign updatedCampaign = new Campaign();
updatedCampaign.setId(campaignId);
updatedCampaign.setSettings(campaign.getSettings());

CampaignOperation operation = new CampaignOperation();
operation.setOperand(updatedCampaign);
operation.setOperator(Operator.SET);

updatedCampaign = campaignService.mutate(new CampaignOperation[] {operation}).getValue(0);
System.out.printf(
    "DSA page feed for campaign ID %d was updated with feed ID %d.%n",
    updatedCampaign.getId(), feedDetails.feedId);

Python

dsa_setting['pageFeed'] = {
    'feedIds': [feed_id]
}

# Optional: Specify whether only the supplied URLs should be used with your
# Dynamic Search Ads.
dsa_setting['useSuppliedUrlsOnly'] = True

operation = {
    'operand': {
        'id': campaign_id,
        'settings': campaign_settings
    },
    'operator': 'SET'
}

campaign_service.mutate([operation])
print 'DSA page feed for campaign ID "%d" was updated with feed ID "%d".' % (
    campaign_id, feed_id)

PHP

// Use a page feed to specify precisely which URLs to use with your
// Dynamic Search Ads.
$pageFeed = new PageFeed();
$pageFeed->setFeedIds([$feedDetails->feedId]);
$dsaSetting->setPageFeed($pageFeed);

// Optional: Specify whether only the supplied URLs should be used with your
// Dynamic Search Ads.
$dsaSetting->setUseSuppliedUrlsOnly(true);

$updatedCampaign = new Campaign();
$updatedCampaign->setId($campaignId);
$updatedCampaign->setSettings($campaign->getSettings());

$operation = new CampaignOperation();
$operation->setOperand($updatedCampaign);
$operation->setOperator(Operator::SET);

// Update the campaign on the server and print out some information.
$result = $campaignService->mutate([$operation]);
$updatedCampaign = $result->getValue()[0];
printf("DSA page feed for campaign ID %d was updated with feed ID %d.\n",
    $updatedCampaign->getId(), $feedDetails->feedId);

Perl

# Use a page feed to specify precisely which URLs to use with your
# Dynamic Search Ads.
my $page_feed = Google::Ads::AdWords::v201705::PageFeed->new({
    feedIds => [$feed_details->{"feedId"}]});
$dsa_setting->set_pageFeed($page_feed);

# Optional: Specify whether only the supplied URLs should be used with your
# Dynamic Search Ads.
$dsa_setting->set_useSuppliedUrlsOnly(1);

my $updated_campaign = Google::Ads::AdWords::v201705::Campaign->new({
    id       => $campaign_id,
    settings => [$dsa_setting]});

my $operation = Google::Ads::AdWords::v201705::CampaignOperation->new({
  operand  => $updated_campaign,
  operator => "SET"
});

$client->CampaignService()->mutate({operations => [$operation]});
printf(
  "DSA page feed for campaign ID %d was updated with feed ID %d.\n",
  $updated_campaign->get_id(),
  $feed_details->{"feedId"});

Ruby

# Use a page feed to specify precisely which URLs to use with your Dynamic
# Search Ads.
page_feed = {
  :feed_ids => [feed_details[:feed_id]]
}
dsa_setting[:page_feed] = page_feed

# Optional: Specify whether only the supplied URLs should be used with your
# Dynamic Search Ads.
dsa_setting[:use_supplied_urls_only] = true

updated_campaign = {
  :id => campaign_id,
  :settings => campaign[:settings]
}

operation = {
  :operand => updated_campaign,
  :operator => 'SET'
}

updated_campaign = campaign_srv.mutate([operation])[:value].first
puts "DSA page feed for campaign ID %d was updated with feed ID %d." % [
  updated_campaign[:id], feed_details[:feed_id]
]

Эти настройки соответствуют указанным ниже опциям в интерфейсе AdWords.

useSuppliedUrlsOnly pageFeed.feedIds Опция в интерфейсе AdWords`
false Н/Д Использовать индекс сайта в Google.
false Указаны один или несколько идентификаторов фида. Использовать URL из индекса веб-сайта в Google и из фида страниц.
true Указаны один или несколько идентификаторов фида. Использовать только URL из фида страниц.
true Пустое или null Не поддерживается. API выводит ошибку SettingError.DYNAMIC_SEARCH_ADS_SETTING_AT_LEAST_ONE_FEED_ID_MUST_BE_PRESENT.

Таргетинг на URL из фида страниц с помощью меток продавца

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

C#

private static BiddableAdGroupCriterion AddDsaTargeting(AdWordsUser user, long adGroupId,
    string labelName) {
  // Get the AdGroupCriterionService.
  AdGroupCriterionService adGroupCriterionService =
    (AdGroupCriterionService) user.GetService(AdWordsService.v201705.AdGroupCriterionService);

  // Create a webpage criterion.
  Webpage webpage = new Webpage();

  WebpageParameter parameter = new WebpageParameter();
  parameter.criterionName = "Test criterion";
  webpage.parameter = parameter;

  // Add a condition for label=specified_label_name.
  WebpageCondition condition = new WebpageCondition();
  condition.operand = WebpageConditionOperand.CUSTOM_LABEL;
  condition.argument = labelName;
  parameter.conditions = new WebpageCondition[] { condition };

  BiddableAdGroupCriterion criterion = new BiddableAdGroupCriterion();
  criterion.adGroupId = adGroupId;
  criterion.criterion = webpage;

  // Set a custom bid for this criterion.
  BiddingStrategyConfiguration biddingStrategyConfiguration =
      new BiddingStrategyConfiguration();

  biddingStrategyConfiguration.bids = new Bids[] {
    new CpcBid() {
      bid = new Money() {
        microAmount = 1500000
      }
    }
  };

  criterion.biddingStrategyConfiguration = biddingStrategyConfiguration;

  AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
  operation.operand = criterion;
  operation.@operator = Operator.ADD;

  try {
    AdGroupCriterionReturnValue retval = adGroupCriterionService.mutate(
        new AdGroupCriterionOperation[] { operation });
    BiddableAdGroupCriterion newCriterion = (BiddableAdGroupCriterion) retval.value[0];

    Console.WriteLine("Web page criterion with ID = {0} and status = {1} was created.",
      newCriterion.criterion.id, newCriterion.userStatus);

    return newCriterion;
  } catch (Exception e) {
    throw new System.ApplicationException("Failed to create webpage criterion for " +
        "custom page feed label.", e);
  }
}
    

Java

private static void addDsaTargeting(
    AdWordsServicesInterface adWordsServices,
    AdWordsSession session,
    Long adGroupId,
    String dsaPageUrlLabel)
    throws ApiException, RemoteException {
  // Get the AdGroupCriterionService.
  AdGroupCriterionServiceInterface adGroupCriterionService =
      adWordsServices.get(session, AdGroupCriterionServiceInterface.class);

  // Create a webpage criterion.
  Webpage webpage = new Webpage();

  WebpageParameter parameter = new WebpageParameter();
  parameter.setCriterionName("Test criterion");
  webpage.setParameter(parameter);

  // Add a condition for label=specified_label_name.
  WebpageCondition condition = new WebpageCondition();
  condition.setOperand(WebpageConditionOperand.CUSTOM_LABEL);
  condition.setArgument(dsaPageUrlLabel);
  parameter.setConditions(new WebpageCondition[] {condition});

  BiddableAdGroupCriterion criterion = new BiddableAdGroupCriterion();
  criterion.setAdGroupId(adGroupId);
  criterion.setCriterion(webpage);

  // Set a custom bid for this criterion.
  BiddingStrategyConfiguration biddingStrategyConfiguration = new BiddingStrategyConfiguration();

  CpcBid cpcBid = new CpcBid();
  Money money = new Money();
  money.setMicroAmount(1_500_000L);
  cpcBid.setBid(money);
  biddingStrategyConfiguration.setBids(new Bids[] {cpcBid});

  criterion.setBiddingStrategyConfiguration(biddingStrategyConfiguration);

  AdGroupCriterionOperation operation = new AdGroupCriterionOperation();
  operation.setOperand(criterion);
  operation.setOperator(Operator.ADD);

  BiddableAdGroupCriterion newCriterion =
      (BiddableAdGroupCriterion)
          adGroupCriterionService.mutate(new AdGroupCriterionOperation[] {operation}).getValue(0);
  System.out.printf(
      "Web page criterion with ID %d and status '%s' was created.%n",
      newCriterion.getCriterion().getId(), newCriterion.getUserStatus());
}
    

Python

# Get the AdGroupCriterionService.
ad_group_criterion_service = client.GetService('AdGroupCriterionService',
                                               version='v201705')

# Create the operation.
operation = {
    'operand': {
        'xsi_type': 'BiddableAdGroupCriterion',
        'adGroupId': ad_group_id,
        # Create a webpage criterion.
        'criterion': {
            'xsi_type': 'Webpage',
            'parameter': {
                'criterionName': 'Test criterion',
                # Add a condition for label=specified_label_name.
                'conditions': [{
                    'operand': 'CUSTOM_LABEL',
                    'argument': label_name
                }],
            }
        },
        # Set a custom bid for this criterion
        'biddingStrategyConfiguration': {
            'bids': [{
                'xsi_type': 'CpcBid',
                'bid': {
                    'microAmount': 1500000
                }
            }]
        }
    },
    'operator': 'ADD'
}

criterion = ad_group_criterion_service.mutate([operation])['value'][0]
print 'Web page criterion with ID "%d" and status "%s" was created.' % (
    criterion['criterion']['id'], criterion['userStatus'])
return criterion
    

PHP

private static function addDsaTargeting(
    AdWordsServices $adWordsServices,
    AdWordsSession $session,
    $adGroupId,
    $dsaPageUrlLabel
) {
  $adGroupCriterionService =
      $adWordsServices->get($session, AdGroupCriterionService::class);

  // Create a webpage criterion.
  $webpage = new Webpage();

  $parameter = new WebpageParameter();
  $parameter->setCriterionName('Test criterion');
  $webpage->setParameter($parameter);

  // Add a condition for label=specified_label_name.
  $condition = new WebpageCondition();
  $condition->setOperand(WebpageConditionOperand::CUSTOM_LABEL);
  $condition->setArgument($dsaPageUrlLabel);
  $parameter->setConditions([$condition]);

  $criterion = new BiddableAdGroupCriterion();
  $criterion->setAdGroupId($adGroupId);
  $criterion->setCriterion($webpage);

  // Set a custom bid for this criterion.
  $biddingStrategyConfiguration = new BiddingStrategyConfiguration();

  $cpcBid = new CpcBid();
  $money = new Money();
  $money->setMicroAmount(1500000);
  $cpcBid->setBid($money);
  $biddingStrategyConfiguration->setBids([$cpcBid]);

  $criterion->setBiddingStrategyConfiguration($biddingStrategyConfiguration);

  $operation = new AdGroupCriterionOperation();
  $operation->setOperand($criterion);
  $operation->setOperator(Operator::ADD);

  // Create ad group criterion on the server and print out some information.
  $result = $adGroupCriterionService->mutate([$operation]);
  $criterion = $result->getValue()[0];
  printf("Web page criterion with ID %d and status '%s' was created.\n",
      $criterion->getCriterion()->getId(), $criterion->getUserStatus());
}
    

Perl

sub _add_dsa_targeting {
  my ($client, $ad_group_id, $dsa_page_url_label) = @_;

  # Create a webpage criterion.
  # Add a condition for label=specified_label_name.
  my $condition = Google::Ads::AdWords::v201705::WebpageCondition->new({
    operand  => "CUSTOM_LABEL",
    argument => $dsa_page_url_label
  });

  # Create a webpage criterion for special offers.
  my $parameter = Google::Ads::AdWords::v201705::WebpageParameter->new({
      criterionName => "Test criterion",
      conditions    => [$condition]});

  my $webpage = Google::Ads::AdWords::v201705::Webpage->new({
    parameter => $parameter
  });

  # Create biddable ad group criterion.
  my $biddable_ad_group_criterion =
    Google::Ads::AdWords::v201705::BiddableAdGroupCriterion->new({
      adGroupId => $ad_group_id,
      criterion => $webpage,
      # Set a custom bid for this criterion.
      biddingStrategyConfiguration =>
        Google::Ads::AdWords::v201705::BiddingStrategyConfiguration->new({
          bids => [
            Google::Ads::AdWords::v201705::CpcBid->new({
                bid => Google::Ads::AdWords::v201705::Money->new(
                  {microAmount => 1500000}
                ),
              }
            ),
          ]})});

  # Create operation.
  my $operation =
    Google::Ads::AdWords::v201705::AdGroupCriterionOperation->new({
      operator => "ADD",
      operand  => $biddable_ad_group_criterion
    });

  # Create the criterion.
  my $result =
    $client->AdGroupCriterionService()->mutate({operations => [$operation]});
  my $new_ad_group_criterion = $result->get_value()->[0];
  printf "Web page criterion with ID %d and status '%s' was created.\n",
    $new_ad_group_criterion->get_criterion()->get_id(),
    $new_ad_group_criterion->get_userStatus();
}
    

Ruby

def add_dsa_targeting(adwords, ad_group_id, dsa_page_url_label)
  ad_group_criterion_srv =
      adwords.service(:AdGroupCriterionService, API_VERSION)

  webpage = {
    :xsi_type => 'Webpage',
    :parameter => {
      :criterion_name => 'Test criterion',
      :conditions => [{
        :operand => 'CUSTOM_LABEL',
        :argument => dsa_page_url_label
      }]
    }
  }

  bidding_strategy_configuration = {
    :bids => [{
      :xsi_type => 'CpcBid',
      :bid => {
        :micro_amount => 1_500_000
      }
    }]
  }

  criterion = {
    :xsi_type => 'BiddableAdGroupCriterion',
    :ad_group_id => ad_group_id,
    :criterion => webpage,
    :bidding_strategy_configuration => bidding_strategy_configuration
  }

  operation = {
    :operand => criterion,
    :operator => 'ADD'
  }

  new_criterion = ad_group_criterion_srv.mutate([operation])[:value].first
  puts "Web page criterion with ID %d and status '%s' was created." %
      [new_criterion[:criterion][:id], new_criterion[:user_status]]
end
    

Отчеты

Статистика по динамическим поисковым объявлениям представлена в трех типах отчетов.

Отчет по эффективности критериев

Поля Parameter и Dynamic ad target этого отчета содержат имя параметра WebpageParameter, связанного с объектом (в случае, если это объект критерия типа WebpageCriterion). Обратите внимание, что поле типа атрибут может содержать лишь фиксированные значения (здесь это имя параметра WebpageParameter, с которым связаны данные по эффективности).

Отчет по категориям без ключевых слов

Содержит статистику по динамическим поисковым объявлениям без ключевых слов, объединенную по категориям. В отчет не включаются категории, по которым не было ни одного показа. Поля Category0, Category1 и Category2 содержат информацию о соответствующих категориях и подкатегориях.

Категории верхнего уровня Подкатегории первого уровня Подкатегории второго уровня Клики Показы День Стоимость
Путешествия и туризм Космические полеты Марс 1 71 20.06.2014 0,05
Путешествия и туризм Приключенческие туры 0 279 21.06.2014 0

Отчет по поисковым запросам без ключевых слов

Содержит статистику по динамическим поисковым объявлениям без ключевых слов, сгруппированную по содержанию поисковых запросов. В отчет не включаются запросы, по которым не было ни одного показа. В столбце Query содержатся все поисковые запросы, по которым был произведен показ объявлений.

Поисковый запрос Клики Показы День Стоимость URL
марс круизы 0 20 20.06.2014 0 http://example.org/LuxuryMarsCruises
марс круизы 0 14 21.06.2014 0 http://example.org/LuxuryMarsCruises
марс недорого 0 24 20.06.2014 0 http://example.org/MarsOnABudget
марс недорого 0 18 21.06.2014 0 http://example.org/MarsOnABudget
марс достопримечательности 0 130 21.06.2014 0 http://example.org/MajorTouristSpots
марс смайлик 0 44 21.06.2014 0 http://example.org/MajorTouristSpots
безопасность космических полетов 1 3 20.06.2014 0,05 http://example.org/ButIsItSafe
марс космодромы 0 11 21.06.2014 0 http://example.org/HowToGetToMars
марс пляжи 0 24 20.06.2014 0 http://example.org/MarsBeachVacations
марс пляжи 0 39 21.06.2014 0 http://example.org/MarsBeachVacations
марс каньоны 0 23 21.06.2014 0 http://example.org/DayTripsAndActivities
Всего 1 350 -- 0,05 --

Примеры кода

Примеры полного кода для работы с динамическими поисковыми объявлениями можно найти в клиентских библиотеках.

C#

Java

Python

PHP

Perl

Ruby

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

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