Tối ưu hóa nhóm trang thông tin mua sắm với Google Ads

Google Ads là một công cụ mạnh mẽ cho các doanh nghiệp muốn tối ưu hóa quảng cáo trực tuyến và đạt được kết quả tối ưu. Một trong những tính năng nổi bật của Google Ads là khả năng tạo nhóm trang thông tin mua sắm, giúp bạn phân chia sản phẩm thành các nhóm dựa trên nhiều yếu tố khác nhau như tình trạng, thương hiệu, hoặc danh mục sản phẩm. Việc này không chỉ giúp quản lý hiệu quả sản phẩm mà còn hỗ trợ bạn trong việc tối ưu hóa giá thầu CPC, cải thiện khả năng tiếp cận khách hàng mục tiêu và nâng cao hiệu suất quảng cáo.

Nhóm trang thông tin mua sắm trong Google Ads cho phép nhà quảng cáo phân loại và quản lý sản phẩm bằng cách tạo các nhóm dựa trên nhiều thuộc tính khác nhau. Các nhóm này được gọi là “sản phẩm nhóm” trong giao diện người dùng. Nhà quảng cáo có thể cấu hình các nhóm sản phẩm bằng cách sử dụng các phương diện như tình trạng sản phẩm, thương hiệu, hoặc danh mục sản phẩm, qua đó bao gồm hoặc loại trừ các sản phẩm khỏi chiến dịch quảng cáo.

Ví dụ, một cấu trúc cây phân loại có thể bắt đầu từ cấp độ tình trạng sản phẩm, phân chia sản phẩm thành các nhóm như “mới”, “đã qua sử dụng” và các tình trạng khác. Sau đó, trong từng nhóm, sản phẩm có thể được chia nhỏ hơn theo thương hiệu như “CoolBrand”, “cheapBrand” và các thương hiệu khác.

Mỗi nút trong cấu trúc cây được coi là một “phân mục” hoặc “đơn vị”, được xác định bởi ListingGroupType. Phân mục tạo ra một nhánh mới trong cấu trúc cây, trong khi đơn vị là các nút lá. Để đảm bảo cấu trúc phân loại chính xác, phân mục cần bao gồm một nút đại diện cho các sản phẩm không thuộc nhóm nào, thường được gọi là “Khác”. Trong ví dụ này, thư mục gốc và tình trạng sản phẩm: Nút “Khác” là những phân mục, cho phép đặt giá thầu ở cấp đơn vị. Điều này đảm bảo rằng mỗi sản phẩm chỉ thuộc về một nút đơn vị duy nhất trong cây.

Các nút trong cây được biểu diễn thông qua ListingGroupInfo, đối tượng chứa trường ListingGroupType, xác định vai trò của nút là đơn vị hay phân mục. Khi cấu hình ListingGroupInfo cho một AdGroupCriterion, nó sẽ liên kết sản phẩm trong tài khoản đó với nhóm quảng cáo.

Để cây nhóm thông tin hợp lệ, bạn cần ít nhất một nút đơn vị. Đơn vị này có thể là nút gốc, đại diện cho tất cả các sản phẩm. Quảng cáo sẽ không hiển thị cho đến khi cây nhóm trang thông tin được cấu trúc đúng cách và hợp lệ.

Đặt giá thầu CPC thủ công

Trong Google Ads, bạn có thể thiết lập giá thầu CPC thủ công (cpc_bid_micros) cho AdGroupCriterion, nhưng chỉ được áp dụng cho các nút đơn vị trong cấu trúc nhóm trang thông tin. Nếu cố gắng áp dụng giá thầu này trên các nút phân mục, hệ thống sẽ báo lỗi và không thành công, do phân mục không hỗ trợ việc đặt giá thầu.

Phương diện trang thông tin

ListingGroupInfo chứa trường case_value, đại diện cho ListingDimensionInfo, một tập hợp các phương diện có thể được sử dụng để phân loại sản phẩm. Các phương diện này bao gồm mã mặt hàng, thương hiệu, tình trạng sản phẩm, và nhiều loại khác. Chúng giúp xác định giá trị liên kết với từng sản phẩm trong chiến dịch quảng cáo. Thông tin chi tiết về các loại ListingDimensionInfo có sẵn được cung cấp trong tài liệu tham khảo của Google Ads.

Khi tạo các phần tử con trong một phân mục, tất cả chúng phải sử dụng cùng một loại case_value tương ứng với ListingDimensionInfo. Điều đặc biệt là chỉ có nút gốc không cần đến case_value.

Lưu ý rằng mỗi phân mục phải bao gồm một case_value “trống”, thường được gọi là “Khác”. Điều này giúp đại diện cho tất cả các giá trị khác chưa được chỉ định trong ListingDimensionInfo, đảm bảo rằng không có sản phẩm nào bị bỏ sót trong quá trình phân loại.

Xem các đoạn mã dưới đây để thiết lập cấp đầu tiên của cây nhóm trang thông tin trong Google Ads để biết thêm chi tiết.

Java
private void runExample(
GoogleAdsClient googleAdsClient,
long customerId,
long adGroupId,
boolean replaceExistingTree)
{
// 1) Tùy chọn: Loại bỏ cây nhóm trang thông tin hiện tại, nếu đã tồn tại trong nhóm quảng cáo.
if (replaceExistingTree) {
removeListingGroupTree(googleAdsClient, customerId, adGroupId);
}

// Tạo danh sách các hoạt động thêm tiêu chí nhóm quảng cáo.
List<AdGroupCriterionOperation> operations = new ArrayList<>();

// 2) Xây dựng nút gốc của cây nhóm trang thông tin.

// Nút phân mục: (Nút gốc)
AdGroupCriterion adGroupCriterionRoot =
createListingGroupSubdivisionRoot(customerId, adGroupId, –1L);

// Lấy tên tài nguyên sẽ được sử dụng cho nút gốc.
// Tài nguyên này chưa được tạo và sẽ bao gồm ID tạm thời trong ID của tiêu chí.
String adGroupCriterionResourceNameRoot = adGroupCriterionRoot.getResourceName();
operations.add(AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionRoot).build());

// 3) Xây dựng các nút đơn vị nhóm trang thông tin cho các điều kiện “mới”, “đã qua sử dụng” và các sản phẩm khác.

// Nút đơn vị có thể đặt giá thầu: (Nút điều kiện “mới”)
// * Điều kiện sản phẩm: Mới
// * Giá thầu CPC: $0.20
AdGroupCriterion adGroupCriterionConditionNew =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(
ProductConditionInfo.newBuilder().setCondition(ProductCondition.NEW).build())
.build(),
200_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionNew).build());

// Nút đơn vị có thể đặt giá thầu: (Nút điều kiện “đã qua sử dụng”)
// * Điều kiện sản phẩm: Đã qua sử dụng
// * Giá thầu CPC: $0.10
AdGroupCriterion adGroupCriterionConditionUsed =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(
ProductConditionInfo.newBuilder().setCondition(ProductCondition.USED).build())
.build(),
100_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionUsed).build());

// Nút phân mục: (Nút điều kiện “khác”)
// * Điều kiện sản phẩm: (không xác định)
AdGroupCriterion adGroupCriterionConditionOther =
createListingGroupSubdivision(
customerId,
adGroupId,
2L,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(ProductConditionInfo.newBuilder().build())
.build());
String adGroupCriterionResourceNameConditionOther =
adGroupCriterionConditionOther.getResourceName();
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionOther).build());

// 4) Xây dựng các nút đơn vị nhóm trang thông tin cho các thương hiệu “CoolBrand”, “CheapBrand” và các thương hiệu khác.

// Nút đơn vị có thể đặt giá thầu: (Thương hiệu CoolBrand)
// * Thương hiệu: CoolBrand
// * Giá thầu CPC: $0.90
AdGroupCriterion adGroupCriterionBrandCoolBrand =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameConditionOther,
ListingDimensionInfo.newBuilder()
.setProductBrand(ProductBrandInfo.newBuilder().setValue(“CoolBrand”).build())
.build(),
900_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionBrandCoolBrand).build());

// Nút đơn vị có thể đặt giá thầu: (Thương hiệu CheapBrand)
// * Thương hiệu: CheapBrand
// * Giá thầu CPC: $0.01
AdGroupCriterion adGroupCriterionBrandCheapBrand =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameConditionOther,
ListingDimensionInfo.newBuilder()
.setProductBrand(ProductBrandInfo.newBuilder().setValue(“CheapBrand”).build())
.build(),
10_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionBrandCheapBrand).build());

// Nút đơn vị có thể đặt giá thầu: (Thương hiệu khác)
// * Thương hiệu: (không xác định)
AdGroupCriterion adGroupCriterionBrandOther =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameConditionOther,
ListingDimensionInfo.newBuilder()
.setProductBrand(ProductBrandInfo.newBuilder().build())
.build(),
50_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionBrandOther).build());

// Gửi yêu cầu mutate để thêm các tiêu chí nhóm quảng cáo vào nhóm quảng cáo.
try (AdGroupCriterionServiceClient adGroupCriterionServiceClient =
googleAdsClient.getLatestVersion().createAdGroupCriterionServiceClient()) {
List<MutateAdGroupCriterionResult> mutateAdGroupCriteriaResults =
adGroupCriterionServiceClient
.mutateAdGroupCriteria(Long.toString(customerId), operations)
.getResultsList();
for (MutateAdGroupCriterionResult mutateAdGroupCriterionResult :
mutateAdGroupCriteriaResults) {
System.out.printf(
“Đã thêm tiêu chí nhóm quảng cáo cho nhóm trang thông tin với tên tài nguyên: ‘%s’%n”,
mutateAdGroupCriterionResult.getResourceName());
}
}
}

Các phương diện có sẵn cho ListingDimensionInfo

Trong Google Ads, có nhiều phương diện trang thông tin có thể được áp dụng ở cấp độ nhóm quảng cáo hoặc chiến dịch. Các phương diện này giúp phân loại và quản lý sản phẩm một cách hiệu quả hơn trong chiến dịch quảng cáo mua sắm.

Dưới đây là các loại ListingDimensionInfo mà bạn có thể sử dụng trong chiến dịch mua sắm:

  • ProductBrandInfo
  • ProductCategoryInfo
  • ProductCustomAttributeInfo
  • ProductChannelInfo
  • ProductChannelExclusivityInfo
  • ProductConditionInfo
  • ProductItemIdInfo
  • ProductTypeInfo

Mỗi loại tài nguyên này bao gồm một danh sách nội dung bản địa hóa được hỗ trợ trong ProductCategoryConstant.ProductCategoryLocalization. Để hiểu rõ hơn về dữ liệu mà các tài nguyên này trả về, bạn có thể xem ví dụ về hằng số danh mục sản phẩm.

Lưu ý quan trọng: Bạn có thể tạo các nút đơn vị bằng cách truyền một đối tượng rỗng của ListingDimensionInfo vào ListingGroupInfo. Trong trường hợp này, bạn cũng cần phải đặt trường cpc_bid_micros cho AdGroupCriterion của nút đơn vị “Khác” để đảm bảo việc đặt giá thầu hoạt động chính xác.

Mã nhận dạng tạm thời

Trong quá trình tạo tiêu chí nhóm quảng cáo, các tiêu chí này sẽ không được chỉ định ID cho đến khi yêu cầu đột biến được xử lý bởi máy chủ. Tuy nhiên, để cấu trúc ListingGroupInfo hợp lệ, mỗi lần tạo phân mục bạn phải tạo ít nhất một nút con và một nút “Khác” trong cùng một yêu cầu.

Để đặt giá trị parent_criterion_id cho ListingGroupInfo đối với các nút con được tạo trong cùng yêu cầu, bạn có thể sử dụng mã tiêu chí tạm thời. Đây là số liệu cục bộ, chỉ có hiệu lực trong phạm vi của yêu cầu đột biến và không có hiệu lực trên toàn hệ thống. Bất kỳ số nguyên âm nào cũng có thể được sử dụng làm mã nhận dạng tạm thời. Trong ví dụ mã, mã nhận dạng của ListingGroupInfo gốc được đặt là -1.

Khi yêu cầu được xử lý, mỗi AdGroupCriterion sẽ được gán một mã định danh toàn cầu dương, giống như thông thường.

Ví dụ về mã

Dưới đây là đoạn mã hoàn chỉnh để thiết lập một nhóm trang thông tin mua sắm trong Google Ads. Mã này giúp thêm một cây nhóm trang thông tin vào nhóm quảng cáo mua sắm, xóa cây hiện tại (nếu có), và xây dựng một cây mới dựa trên các điều kiện sản phẩm và thương hiệu cụ thể.

Java

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

import com.google.ads.googleads.lib.GoogleAdsClient;
import com.google.ads.googleads.v17.common.ListingDimensionInfo;
import com.google.ads.googleads.v17.common.ListingGroupInfo;
import com.google.ads.googleads.v17.common.ProductBrandInfo;
import com.google.ads.googleads.v17.common.ProductConditionInfo;
import com.google.ads.googleads.v17.enums.AdGroupCriterionStatusEnum.AdGroupCriterionStatus;
import com.google.ads.googleads.v17.enums.ListingGroupTypeEnum.ListingGroupType;
import com.google.ads.googleads.v17.enums.ProductConditionEnum.ProductCondition;
import com.google.ads.googleads.v17.errors.GoogleAdsError;
import com.google.ads.googleads.v17.errors.GoogleAdsException;
import com.google.ads.googleads.v17.resources.AdGroupCriterion;
import com.google.ads.googleads.v17.services.AdGroupCriterionOperation;
import com.google.ads.googleads.v17.services.AdGroupCriterionServiceClient;
import com.google.ads.googleads.v17.services.MutateAdGroupCriteriaResponse;
import com.google.ads.googleads.v17.services.MutateAdGroupCriterionResult;
import com.google.ads.googleads.v17.utils.ResourceNames;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class AddShoppingProductListingGroupTree {

public static void main(String[] args) {
GoogleAdsClient googleAdsClient = null;
try {
googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build();
} catch (IOException ioe) {
System.err.printf(“Failed to create GoogleAdsClient. Exception: %s%n”, ioe);
System.exit(1);
}

try {
new AddShoppingProductListingGroupTree()
.runExample(googleAdsClient, 1234567890L, 9876543210L, true);
} catch (GoogleAdsException gae) {
System.err.printf(“Request failed due to GoogleAdsException: %s%n”, gae.getMessage());
System.exit(1);
}
}

private void runExample(
GoogleAdsClient googleAdsClient, long customerId, long adGroupId, boolean replaceExistingTree)
{
// Loại bỏ cây nhóm trang thông tin hiện tại nếu có, nếu tùy chọn replaceExistingTree được bật.
if (replaceExistingTree) {
removeListingGroupTree(googleAdsClient, customerId, adGroupId);
}

// Tạo danh sách các hoạt động tiêu chí nhóm quảng cáo.
List<AdGroupCriterionOperation> operations = new ArrayList<>();

// Xây dựng nút gốc của cây nhóm trang thông tin.
AdGroupCriterion adGroupCriterionRoot =
createListingGroupSubdivisionRoot(customerId, adGroupId, –1L);
String adGroupCriterionResourceNameRoot = adGroupCriterionRoot.getResourceName();
operations.add(AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionRoot).build());

// Tạo các nút đơn vị cho các sản phẩm mới và đã qua sử dụng.
AdGroupCriterion adGroupCriterionConditionNew =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(
ProductConditionInfo.newBuilder().setCondition(ProductCondition.NEW).build())
.build(),
200_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionNew).build());

AdGroupCriterion adGroupCriterionConditionUsed =
createListingGroupUnitBiddable(
customerId,
adGroupId,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(
ProductConditionInfo.newBuilder().setCondition(ProductCondition.USED).build())
.build(),
100_000L);
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionUsed).build());

// Tạo nút phân mục cho sản phẩm khác.
AdGroupCriterion adGroupCriterionConditionOther =
createListingGroupSubdivision(
customerId,
adGroupId,
2L,
adGroupCriterionResourceNameRoot,
ListingDimensionInfo.newBuilder()
.setProductCondition(ProductConditionInfo.newBuilder().build())
.build());
operations.add(
AdGroupCriterionOperation.newBuilder().setCreate(adGroupCriterionConditionOther).build());

// Thực hiện yêu cầu đột biến để thêm tiêu chí nhóm quảng cáo vào nhóm quảng cáo.
try (AdGroupCriterionServiceClient adGroupCriterionServiceClient =
googleAdsClient.getLatestVersion().createAdGroupCriterionServiceClient()) {
MutateAdGroupCriteriaResponse response =
adGroupCriterionServiceClient.mutateAdGroupCriteria(
Long.toString(customerId), operations);
for (MutateAdGroupCriterionResult result : response.getResultsList()) {
System.out.printf(
“Added ad group criterion for listing group with resource name: ‘%s’%n”,
result.getResourceName());
}
}
}

private void removeListingGroupTree(
GoogleAdsClient googleAdsClient, long customerId, long adGroupId)
{
// Đoạn mã loại bỏ toàn bộ cây nhóm trang thông tin nếu đã tồn tại trong nhóm quảng cáo.
}

private AdGroupCriterion createListingGroupUnitBiddable(
long customerId,
long adGroupId,
String parentAdGroupCriterionResourceName,
ListingDimensionInfo listingDimensionInfo,
long cpcBidMicros)
{
// Tạo nút đơn vị có thể đặt giá thầu.
}

private AdGroupCriterion createListingGroupSubdivisionRoot(
long customerId, long adGroupId, long adGroupCriterionId)
{
// Tạo nút phân mục gốc.
}

private AdGroupCriterion createListingGroupSubdivision(
long customerId, long adGroupId, long adGroupCriterionId, String parentAdGroupCriterionResourceName,
ListingDimensionInfo listingDimensionInfo)
{
// Tạo nút phân mục.
}
}

Việc hiểu rõ cách sử dụng nhóm trang thông tin mua sắm trong Google Ads không chỉ giúp bạn quản lý tốt sản phẩm mà còn mở ra cơ hội tối ưu hóa quảng cáo một cách hiệu quả. Tận dụng tối đa các phương diện như thương hiệu, tình trạng sản phẩm và danh mục sẽ giúp bạn tiếp cận đúng đối tượng, tối ưu hóa ngân sách và nâng cao hiệu suất chiến dịch quảng cáo. Hãy áp dụng những kiến thức này để đưa chiến dịch Google Ads của bạn lên một tầm cao mới.

Facebook
X
LinkedIn
Tumblr
Threads
logo_v4seowebsite

V4SEO là đội ngũ SEO & Web xuất phát từ Nha Trang, triển khai dự án cho doanh nghiệp trên toàn quốc. Chúng tôi cung cấp Dịch vụ SEO Nha Trang theo chuẩn Google, kết hợp kỹ thuật, nội dung và entity để tăng trưởng bền vững. Song song, Dịch vụ thiết kế website Nha Trang tối ưu UX, tốc độ và Core Web Vitals nhằm tối đa chuyển đổi; báo cáo minh bạch, hỗ trợ dài hạn.

Nội dung được sự cố vấn của chuyên gia SEO - Võ Quang Vinh
author-founder-v4seowebsite

Võ Quang Vinh – Chuyên gia SEO với hơn 10 năm kinh nghiệm triển khai hàng trăm dự án SEO tổng thể, từ thương mại điện tử đến dịch vụ địa phương. Từng đảm nhiệm vai trò SEO và là Keymember tại Gobranding và dân dắt đội SEO BachhoaXanh.com, anh là người đứng sau nhiều chiến dịch tăng trưởng traffic vượt bậc. Hiện tại, Vinh là người sáng lập và điều hành V4SEO, cung cấp giải pháp SEO & thiết kế website chuẩn UX/UI giúp doanh nghiệp bứt phá thứ hạng Google và tối ưu chuyển đổi. 

Bài viết liên quan
ĐĂNG KÝ V4SEO NGAY HÔM NAY KHUYẾN MÃI 15% TẤT CẢ DỊCH VỤ ÁP DỤNG TỚI HẾT THÁNG 12/2025

Nhận tư vấn từ V4SEO Đăng ký ngay hôm nay Bứt phá trong mai sau