Visitors to Specific Pages

  • Target ads based on specific website pages or sections visited using a flexible_rule_user_list.

  • Prerequisites for creating and targeting audience segments include reviewing policy and setting up your Google tag.

  • The Google tag, unique to each account, can be retrieved through the Google Ads UI or API and must be installed on your website or app.

  • You can create user lists targeting visitors who have or have not visited specific pages by combining rules with inclusive and exclusive operands.

  • Targeting a user list is similar to other criteria, with rules about targeting levels and unsupported fields for certain campaign types.

You can target ads to people who have visited specific pages or sections of your website using a flexible_rule_user_list, which lets you target URLs more specific than your website's domain.

Prerequisites

In order to create and target audience segments, you first need to:

  1. Review the policy for advertising based on interests and location. Sensitive information about users can't be used to build audiences.

  2. Set up your Google tag.

    Advertisers seeking to create user lists based on mobile app behavior should implement the Firebase SDK or work with third-party SDKs in order to track in-app behavior.

Retrieve the Google tag

All Google Ads accounts have exactly one account-level Google tag, created automatically when the account is opened.

You can retrieve the Google tag in the Google Ads UI by following the Help Center instructions or in the Google Ads API by creating a RemarketingAction and then retrieving the Google tag by issuing a GoogleAdsService.searchStream request using the remarketing_action resource:

SELECT
  remarketing_action.id,
  remarketing_action.name,
  remarketing_action.tag_snippets
FROM remarketing_action
WHERE remarketing_action.resource_name = 'REMARKETING_ACTION_RESOURCE_NAME'

Install the Google tag on your website or app

The next step is to install your Google tag on all of your site's pages. Learn more about adding the Google tag to your site or mobile app.

If you're planning to build audience segments based only on visited page URLs, you don't need to make any edits to your Google tag. If you're using custom parameters, you need to edit your tag to include them, as detailed in Advanced strategies for tagging and creating remarketing lists.

You can use Google Tag Assistant to validate your tag installation.

Built-in Google tag parameters

You can use the built-in remarketing parameter url__ to target a user list based on the URLs that people have visited on your website, as demonstrated in the Visitors to your website example.

Custom Google tag parameters

You can add custom Google tag parameters to your Google tag to create more tailored user lists.

Before creating your own custom parameters, check out the list of predefined parameters to see if there's already a good fit for your use case. Using predefined parameters makes it easier to integrate with other Google Ads remarketing features.

Create the user list

This section contains two user list examples: visitors of a page who visited another page, and visitors of a page who didn't visit another page.

Visitors of a page who visited another page

You can target ads to people who visited more than one page using a flexible_rule_user_list.

First, create two rules. Then, combine the rules with the inclusive_operands in the flexible_rule_user_list by using an AND operator.

Code example to create a flexible rule user list

Java

private void runExample(GoogleAdsClient googleAdsClient, long customerId) {
  // Creates a UserListRuleInfo object containing the first rule.
  UserListRuleInfo userVisitedSite1Rule =
      createUserListRuleInfoFromUrl("http://example.com/example1");

  // Creates a UserListRuleInfo object containing the second rule.
  UserListRuleInfo userVisitedSite2Rule =
      createUserListRuleInfoFromUrl("http://example.com/example2");

  // Creates a UserListRuleInfo object containing the third rule.
  UserListRuleInfo userVisitedSite3Rule =
      createUserListRuleInfoFromUrl("http://example.com/example3");

  // Create the user list "Visitors of page 1 AND page 2, but not page 3". To create the user list
  // "Visitors of page 1 *OR* page 2, but not page 3", change the UserListFlexibleRuleOperator
  // from AND to OR.
  FlexibleRuleUserListInfo flexibleRuleUserListInfo =
      FlexibleRuleUserListInfo.newBuilder()
          .setInclusiveRuleOperator(UserListFlexibleRuleOperator.AND)
          // Inclusive operands are joined together with the specified inclusiveRuleOperator. This
          // represents the set of users that should be included in the user list.
          .addInclusiveOperands(
              FlexibleRuleOperandInfo.newBuilder()
                  .setRule(userVisitedSite1Rule)
                  // Optional: adds a lookback window for this rule, in days.
                  .setLookbackWindowDays(7L))
          .addInclusiveOperands(
              FlexibleRuleOperandInfo.newBuilder()
                  .setRule(userVisitedSite2Rule)
                  // Optional: adds a lookback window for this rule, in days.
                  .setLookbackWindowDays(7L))
          .addExclusiveOperands(
              // Exclusive operands are joined together with OR. This represents the set of users
              // to be excluded from the user list.
              FlexibleRuleOperandInfo.newBuilder().setRule(userVisitedSite3Rule))
          .build();

  // Defines a representation of a user list that is generated by a rule.
  RuleBasedUserListInfo ruleBasedUserListInfo =
      RuleBasedUserListInfo.newBuilder()
          // Optional: To include past users in the user list, set the prepopulation_status to
          // REQUESTED.
          .setPrepopulationStatus(UserListPrepopulationStatus.REQUESTED)
          .setFlexibleRuleUserList(flexibleRuleUserListInfo)
          .build();

  // Creates a user list.
  UserList userList =
      UserList.newBuilder()
          .setName("Flexible rule user list for example.com #" + getPrintableDateTime())
          .setDescription(
              "Visitors of both http://example.com/example1 AND http://example.com/example2 but"
                  + " NOT http://example.com/example3")
          .setMembershipStatus(UserListMembershipStatus.OPEN)
          .setRuleBasedUserList(ruleBasedUserListInfo)
          .build();

  // Creates the operation.
  UserListOperation operation = UserListOperation.newBuilder().setCreate(userList).build();

  // Creates the user list service client.
  try (UserListServiceClient userListServiceClient =
      googleAdsClient.getLatestVersion().createUserListServiceClient()) {
    // Adds the user list.
    MutateUserListsResponse response =
        userListServiceClient.mutateUserLists(
            Long.toString(customerId), ImmutableList.of(operation));
    String userListResourceName = response.getResults(0).getResourceName();
    // Prints the result.
    System.out.printf("Created user list with resource name '%s'.%n", userListResourceName);
  }
}

/**
 * Creates a UserListRuleInfo object containing a rule targeting any user that visited the
 * provided URL.
 */
private UserListRuleInfo createUserListRuleInfoFromUrl(String urlString) {
  // Creates a rule targeting any user that visited a URL that equals the given urlString.
  UserListRuleItemInfo userVisitedSiteRule =
      UserListRuleItemInfo.newBuilder()
          // Uses a built-in parameter to create a domain URL rule.
          .setName(URL_STRING)
          .setStringRuleItem(
              UserListStringRuleItemInfo.newBuilder()
                  .setOperator(UserListStringRuleItemOperator.EQUALS)
                  .setValue(urlString))
          .build();

  // Returns a UserListRuleInfo object containing the rule.
  return UserListRuleInfo.newBuilder()
      .addRuleItemGroups(UserListRuleItemGroupInfo.newBuilder().addRuleItems(userVisitedSiteRule))
      .build();
}
      

C#

public void Run(GoogleAdsClient client, long customerId)
{
    // Creates a UserListRuleInfo object containing the first rule.
    UserListRuleInfo userVisitedSite1Rule =
        CreateUserListRuleInfoFromUrl("http://example.com/example1");

    // Creates a UserListRuleInfo object containing the second rule.
    UserListRuleInfo userVisitedSite2Rule =
        CreateUserListRuleInfoFromUrl("http://example.com/example2");

    // Creates a UserListRuleInfo object containing the third rule.
    UserListRuleInfo userVisitedSite3Rule =
        CreateUserListRuleInfoFromUrl("http://example.com/example3");

    // Create the user list "Visitors of page 1 AND page 2, but not page 3". To create the
    // user list "Visitors of page 1 *OR* page 2, but not page 3", change the
    // UserListFlexibleRuleOperator from And to Or.
    FlexibleRuleUserListInfo flexibleRuleUserListInfo = new FlexibleRuleUserListInfo
    {
        InclusiveRuleOperator = UserListFlexibleRuleOperator.And
    };

    // Inclusive operands are joined together with the specified inclusiveRuleOperator. This
    // represents the set of users that should be included in the user list.
    flexibleRuleUserListInfo.InclusiveOperands.Add(new FlexibleRuleOperandInfo
    {
        Rule = userVisitedSite1Rule,
        // Optional: adds a lookback window for this rule, in days.
        LookbackWindowDays = 7
    });
    flexibleRuleUserListInfo.InclusiveOperands.Add(new FlexibleRuleOperandInfo
    {
        Rule = userVisitedSite2Rule,
        // Optional: adds a lookback window for this rule, in days.
        LookbackWindowDays = 7
    });

    // Exclusive operands are joined together with OR. This represents the set of users
    // to be excluded from the user list.
    flexibleRuleUserListInfo.InclusiveOperands.Add(new FlexibleRuleOperandInfo
    {
        Rule = userVisitedSite3Rule
    });

    // Defines a representation of a user list that is generated by a rule.
    RuleBasedUserListInfo ruleBasedUserListInfo = new RuleBasedUserListInfo
    {
        // Optional: To include past users in the user list, set the prepopulation_status to
        // REQUESTED.
        PrepopulationStatus = UserListPrepopulationStatus.Requested,
        FlexibleRuleUserList = flexibleRuleUserListInfo
    };

    // Creates a user list.
    UserList userList = new UserList
    {
        Name = $"Flexible rule user list example.com #{ExampleUtilities.GetRandomString()}",
        Description = "Visitors of both https://example.com/example1 AND " +
            "https://example.com/example2 but NOT https://example.com/example3",
        MembershipStatus = UserListMembershipStatus.Open,
        RuleBasedUserList = ruleBasedUserListInfo
    };

    // Creates the operation.
    UserListOperation operation = new UserListOperation
    {
        Create = userList
    };

    try
    {
        UserListServiceClient userListServiceClient =
            client.GetService(Services.V22.UserListService);
        MutateUserListsResponse response =
            userListServiceClient.MutateUserLists(customerId.ToString(),
                new[] { operation });

        string userListResourceName = response.Results[0].ResourceName;
        Console.WriteLine($"Created user list with resource name '{userListResourceName}'.");
    }
    catch (GoogleAdsException e)
    {
        Console.WriteLine("Failure:");
        Console.WriteLine($"Message: {e.Message}");
        Console.WriteLine($"Failure: {e.Failure}");
        Console.WriteLine($"Request ID: {e.RequestId}");
        throw;
    }
}

/// <summary>
/// Creates a UserListRuleInfo object containing a rule targeting any user that visited the
/// provided URL.
/// </summary>
private UserListRuleInfo CreateUserListRuleInfoFromUrl(string urlString)
{
    // Creates a rule targeting any user that visited a URL that equals the given urlString.
    UserListRuleItemInfo userVisitedSiteRule = new UserListRuleItemInfo
    {
        Name = URL_STRING,
        StringRuleItem = new UserListStringRuleItemInfo
        {
            Operator = UserListStringRuleItemOperator.Equals,
            Value = urlString
        }
    };

    // Returns a UserListRuleInfo object containing the rule.
    UserListRuleInfo userListRuleInfo = new UserListRuleInfo();
    UserListRuleItemGroupInfo userListRuleItemGroupInfo = new UserListRuleItemGroupInfo();
    userListRuleItemGroupInfo.RuleItems.Add(userVisitedSiteRule);
    userListRuleInfo.RuleItemGroups.Add(userListRuleItemGroupInfo);

    return userListRuleInfo;
}
      

PHP

public static function runExample(
    GoogleAdsClient $googleAdsClient,
    int $customerId
) {
    // Creates a rule targeting any user that visited a url that equals
    // http://example.com/example1'.
    $userVisitedSite1RuleInfo = self::createUserListRuleFromUrl('http://example.com/example1');
    // Creates a rule targeting any user that visited a url that equals
    // http://example.com/example2'.
    $userVisitedSite2RuleInfo = self::createUserListRuleFromUrl('http://example.com/example2');
    // Creates a rule targeting any user that visited a url that equals
    // http://example.com/example3'.
    $userVisitedSite3RuleInfo = self::createUserListRuleFromUrl('http://example.com/example3');

    // Create the user list "Visitors of page 1 AND page 2, but not page 3".
    // To create the user list "Visitors of page 1 *OR* page 2, but not page 3",
    // change the UserListFlexibleRuleOperator from PBAND to OR.
    $flexibleRuleUserListInfo = new FlexibleRuleUserListInfo([
        'inclusive_rule_operator' => UserListFlexibleRuleOperator::PBAND,
        'inclusive_operands' => [
            new FlexibleRuleOperandInfo([
                'rule' => $userVisitedSite1RuleInfo,
                // Optionally add a lookback window for this rule, in days.
                'lookback_window_days' => 7
            ]),
            new FlexibleRuleOperandInfo([
                'rule' => $userVisitedSite2RuleInfo,
                // Optionally add a lookback window for this rule, in days.
                'lookback_window_days' => 7
            ])
        ],
        // Exclusive operands are joined together with OR. This represents the set of users to
        // be excluded from the user list.
        'exclusive_operands' => [
            new FlexibleRuleOperandInfo(['rule' => $userVisitedSite3RuleInfo])
        ]
    ]);

    // Defines a representation of a user list that is generated by a rule.
    $ruleBasedUserListInfo = new RuleBasedUserListInfo([
        // Optional: To include past users in the user list, set the prepopulation_status to
        // REQUESTED.
        'prepopulation_status' => UserListPrepopulationStatus::REQUESTED,
        'flexible_rule_user_list' => $flexibleRuleUserListInfo
    ]);

    // Creates a user list.
    $userList = new UserList([
        'name' => 'All visitors to http://example.com/example1 AND ' .
            'http://example.com/example2 but NOT http://example.com/example3 #'
            . Helper::getPrintableDatetime(),
        'description' => 'Visitors of both http://example.com/example1 AND ' .
            'http://example.com/example2 but NOT http://example.com/example3',
        'membership_status' => UserListMembershipStatus::OPEN,
        'rule_based_user_list' => $ruleBasedUserListInfo
    ]);

    // Creates the operation.
    $operation = new UserListOperation();
    $operation->setCreate($userList);

    // Issues a mutate request to add the user list and prints some information.
    $userListServiceClient = $googleAdsClient->getUserListServiceClient();
    $response = $userListServiceClient->mutateUserLists(
        MutateUserListsRequest::build($customerId, [$operation])
    );
    printf(
        "Created user list with resource name '%s'.%s",
        $response->getResults()[0]->getResourceName(),
        PHP_EOL
    );
}