Hướng dẫn quản lý danh sách khách hàng trong Google Ads

Google Ads là một công cụ mạnh mẽ giúp các doanh nghiệp tiếp cận khách hàng mục tiêu một cách chính xác và hiệu quả. Việc quản lý danh sách khách hàng trên Google Ads là một yếu tố quan trọng để duy trì và tối ưu hoá chiến dịch quảng cáo của bạn. Trong bài viết này, chúng ta sẽ tìm hiểu cách cập nhật, thêm và xóa người dùng trong danh sách khách hàng, cũng như cách đo lường hiệu quả và duy trì danh sách một cách tối ưu. Từ đó, bạn sẽ có được cái nhìn toàn diện về quy trình quản lý danh sách khách hàng trên Google Ads và có thể áp dụng những kỹ thuật này để đạt được kết quả tốt hơn trong các chiến dịch của mình.

Để tham khảo hướng dẫn chi tiết về việc cập nhật, xóa và báo cáo danh sách khách hàng, hãy xem qua tài liệu Google Ads.

Cập nhật danh sách với dịch vụ OfflineUserDataJobService

Khi bạn đã thiết lập danh sách khách hàng và xác định tiêu chí nhắm mục tiêu, việc cập nhật thường xuyên là cần thiết để đảm bảo dữ liệu luôn chính xác và tối ưu hóa hiệu quả quảng cáo.

Thay vì xóa toàn bộ dữ liệu người dùng và tải lại từ đầu, bạn nên thực hiện việc thêm hoặc xóa từng người dùng trong danh sách. Cách này sẽ hiệu quả hơn về mặt kỹ thuật và tiết kiệm thời gian xử lý.

Lưu ý quan trọng: Chỉ Google Ads hoặc dữ liệu được cập nhật mới có thể sửa đổi danh sách người dùng được tạo bởi tài khoản đối tác.

Thêm người dùng vào danh sách hiện có

Để thêm người dùng vào danh sách đã tạo, tạo một phiên bản OfflineUserDataJob theo quy trình tương tự như khi tạo danh sách khách hàng mới. Chi tiết về cách thực hiện có thể tham khảo trong tài liệu API của Google Ads.

private void addUsersToCustomerMatchUserList(
GoogleAdsClient googleAdsClient,
long customerId,
boolean runJob,
String userListResourceName,
Long offlineUserDataJobId,
ConsentStatus adPersonalizationConsent,
ConsentStatus adUserDataConsent)

throws UnsupportedEncodingException {
try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
googleAdsClient.getLatestVersion().createOfflineUserDataJobServiceClient()) {
String offlineUserDataJobResourceName;
if (offlineUserDataJobId == null) {
OfflineUserDataJob.Builder offlineUserDataJobBuilder =
OfflineUserDataJob.newBuilder()
.setType(OfflineUserDataJobType.CUSTOMER_MATCH_USER_LIST)
.setCustomerMatchUserListMetadata(
CustomerMatchUserListMetadata.newBuilder().setUserList(userListResourceName));
if (adPersonalizationConsent != null || adUserDataConsent != null) {
Consent.Builder consentBuilder = Consent.newBuilder();
if (adPersonalizationConsent != null) {
consentBuilder.setAdPersonalization(adPersonalizationConsent);
}
if (adUserDataConsent != null) {
consentBuilder.setAdUserData(adUserDataConsent);
}
offlineUserDataJobBuilder
.getCustomerMatchUserListMetadataBuilder()
.setConsent(consentBuilder);
}
CreateOfflineUserDataJobResponse createOfflineUserDataJobResponse =
offlineUserDataJobServiceClient.createOfflineUserDataJob(
Long.toString(customerId), offlineUserDataJobBuilder.build());
offlineUserDataJobResourceName = createOfflineUserDataJobResponse.getResourceName();
System.out.printf(
“Đã tạo một offline user data job với tên tài nguyên: %s.%n”,
offlineUserDataJobResourceName);
} else {
offlineUserDataJobResourceName =
ResourceNames.offlineUserDataJob(customerId, offlineUserDataJobId);
}

List<OfflineUserDataJobOperation> userDataJobOperations = buildOfflineUserDataJobOperations();
AddOfflineUserDataJobOperationsResponse response =
offlineUserDataJobServiceClient.addOfflineUserDataJobOperations(
AddOfflineUserDataJobOperationsRequest.newBuilder()
.setResourceName(offlineUserDataJobResourceName)
.setEnablePartialFailure(true)
.addAllOperations(userDataJobOperations)
.build());

if (response.hasPartialFailureError()) {
GoogleAdsFailure googleAdsFailure =
ErrorUtils.getInstance().getGoogleAdsFailure(response.getPartialFailureError());
System.out.printf(
“Đã gặp %d lỗi trong quá trình thêm %d thao tác vào offline user data job: ‘%s’. “
+ “Chỉ những thao tác thành công sẽ được thực thi khi công việc chạy.%n”,
googleAdsFailure.getErrorsCount(),
userDataJobOperations.size(),
response.getPartialFailureError().getMessage());
} else {
System.out.printf(
“Đã thêm thành công %d thao tác vào offline user data job.%n”,
userDataJobOperations.size());
}

if (!runJob) {
System.out.printf(
“Không chạy offline user data job ‘%s’ theo yêu cầu.%n”,
offlineUserDataJobResourceName);
return;
}

offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(offlineUserDataJobResourceName);

checkJobStatus(googleAdsClient, customerId, offlineUserDataJobResourceName);
}
}

Xóa người dùng cá nhân qua giá trị nhận dạng

Cách xóa người dùng cụ thể:

  • Để xóa từng người dùng riêng lẻ, thiết lập thuộc tính remove trong OfflineUserDataJobOperation với đối tượng UserData.
  • Thêm một hoặc nhiều đối tượng UserIdentifier vào mảng user_identifiers[]. Các giá trị nhận dạng duy nhất của người dùng sẽ giúp loại bỏ người đó khỏi danh sách, ngay cả khi bạn gửi nhiều giá trị nhận dạng khớp.

Lưu ý quan trọng: Không thể kết hợp thao tác remove với thao tác create trong cùng một tác vụ. Nếu thực hiện, công việc sẽ gặp lỗi CONFLICTING_OPERATION.

Xóa tất cả dữ liệu khỏi danh sách

Để xóa toàn bộ người dùng khỏi danh sách, đặt remove_all thành true trong một OfflineUserDataJobOperation và yêu cầu thực thi công việc bằng cách gửi RunOfflineUserDataJob với tên tài nguyên được liên kết với remove_all.

Lưu ý rằng nếu có thao tác remove_all, thao tác này phải là bước đầu tiên trong tác vụ. Nếu không, hệ thống sẽ trả về lỗi INVALID_OPERATION_ORDER. Nếu bạn muốn thay thế hoàn toàn các thành viên trong danh sách người dùng bằng những thành viên mới, hãy sắp xếp các thao tác theo thứ tự sau:

  1. Thiết lập remove_all thành true trong OfflineUserDataJobOperation.
  2. Đối với mỗi thành viên mới, thêm thao tác create và thiết lập UserData của từng thành viên đó trong OfflineUserDataJobOperation.

Lệnh remove_all thường được xử lý hằng giờ và có thể cần tối đa 24 giờ để hoàn thành.

Mẹo: Để quản lý thời gian hết hạn của các thành viên trong danh sách, bạn có thể sử dụng thuộc tính membership_life_span thay vì thao tác OfflineUserDataJobOperation.remove_all.

Đề xuất làm mới danh sách khách hàng

Bạn có thể truy xuất các đề xuất loại REFRESH_CUSTOMER_MATCH_LIST để nhận diện các danh sách khách hàng chưa được cập nhật trong một khoảng thời gian dài. Tính năng này đặc biệt hữu ích khi bạn là nhà quảng cáo bên thứ ba và cho phép khách hàng quản lý danh sách của họ.

Để biết thêm chi tiết về cách quản lý các đề xuất, vui lòng tham khảo tài liệu Hướng dẫn tối ưu hóa và đề xuất.

Xóa danh sách người dùng

Sử dụng UserListService.mutate_user_lists để gửi thao tác remove thông qua tên tài nguyên của danh sách người dùng mà bạn muốn xóa.

Cập nhật danh sách khách hàng với UserDataService

UserDataService được thiết kế cho các cập nhật nhỏ, với giới hạn 10 thao tác và tối đa 100 user_identifiers mỗi yêu cầu. Điều này phù hợp cho việc thêm hoặc cập nhật thông tin liên hệ hạn chế. Ví dụ: nếu mỗi đối tượng UserData chứa một UserIdentifier cho hashed_email và một UserIdentifier khác cho hashed_phone_number, thì yêu cầu của bạn chỉ có thể chứa tối đa 50 đối tượng UserData.

UserDataService hỗ trợ phương thức UploadUserData, nhận yêu cầu UploadUserDataRequest. Ngoài customer_id, UploadUserDataRequest chấp nhận danh sách thao tác tạo liên hệ và một trường bắt buộc customer_match_user_list_metadata, được điền sẵn tên tài nguyên của danh sách tiếp thị lại.

Đầu tiên, bạn tạo một thực thể UploadUserDataRequest và thiết lập customer_id cùng với customer_match_user_list_metadata:

// Tạo yêu cầu thêm dữ liệu người dùng vào danh sách dựa trên địa chỉ email.
String userListResourceName = ResourceNames.userList(customerId, userListId);
UploadUserDataRequest.Builder uploadUserDataRequest =
UploadUserDataRequest.newBuilder()
.setCustomerId(String.valueOf(customerId))
.setCustomerMatchUserListMetadata(
CustomerMatchUserListMetadata.newBuilder()
.setUserList(StringValue.of(userListResourceName))
.build());

Để tải thông tin liên hệ lên, thiết lập CrmBasedUserListInfo.upload_key_type thành CONTACT_INFO.

Sau đó, thêm các thao tác vào UploadUserDataRequest. Mỗi thao tác bao gồm trường create chứa đối tượng UserData cùng một hoặc nhiều thực thể UserIdentifier. Mỗi UserIdentifier chứa một giá trị nhận dạng có thể thuộc các loại khác nhau.

Để tải địa chỉ email, tạo một UserDataOperation và điền dữ liệu vào trường hashed_email trong đối tượng UserData:

ImmutableList<String> EMAILS =
ImmutableList.of("client1@example.com", "client2@example.com", " Client3@example.com ");
// Hash địa chỉ email theo thuật toán SHA-256.
List<UserDataOperation> userDataOperations = new ArrayList<>(EMAILS.size());
for (String email : EMAILS) {
UserDataOperation userDataOperation =
UserDataOperation.newBuilder()
.setCreate(
UserData.newBuilder()
.addUserIdentifiers(
UserIdentifier.newBuilder()
.setHashedEmail(StringValue.of(toSHA256String(email)))
.build())
.build())
.build();
userDataOperations.add(userDataOperation);
}
uploadUserDataRequest.addAllOperations(userDataOperations);

Tải lên thông tin địa chỉ người dùng

Tương tự với địa chỉ email, nhưng thay vì hashed_email, bạn cần điền vào trường address_info với đối tượng OfflineUserAddressInfo chứa first_name, last_name, country_codepostal_code. Lưu ý rằng first_namelast_name phải được băm trước khi tải lên.

String firstName = "Alex";
String lastName = "Quinn";
String countryCode = "US";
String postalCode = "94045";
UserIdentifier userIdentifierWithAddress =
UserIdentifier.newBuilder()
.setAddressInfo(
OfflineUserAddressInfo.newBuilder()
.setHashedFirstName(StringValue.of(toSHA256String(firstName)))
.setHashedLastName(StringValue.of(toSHA256String(lastName)))
.setCountryCode(StringValue.of(countryCode))
.setPostalCode(StringValue.of(postalCode))
.build())
.build();

UserDataOperation userDataOperation =
UserDataOperation.newBuilder()
.setCreate(
UserData.newBuilder()
.addUserIdentifiers(userIdentifierWithAddress)
.build())
.build();
uploadUserDataRequest.addOperations(userDataOperation);

Sau khi thêm các thao tác vào UploadUserDataRequest, gọi phương thức uploadUserData trên UserDataServiceClient để gửi yêu cầu đến API Google Ads. Bạn có thể kiểm tra trạng thái bằng cách xem số lượng thao tác và thời gian tải lên trong phản hồi. Lưu ý rằng việc cập nhật danh sách có thể mất vài giờ để thành viên mới được thêm.

// Tạo user data service client.
try (UserDataServiceClient userDataServiceClient =
googleAdsClient.getLatestVersion().createUserDataServiceClient()) {
// Thêm các thao tác vào danh sách người dùng dựa trên loại dữ liệu.
UploadUserDataResponse response =
userDataServiceClient.uploadUserData(uploadUserDataRequest.build());
// Hiển thị kết quả.
System.out.printf(
“Received %d operations at %s”,
response.getReceivedOperationsCount().getValue(),
response.getUploadDateTime().getValue());
}

Chuyển đổi cấp nhắm mục tiêu của danh sách

Nếu bạn cần điều chỉnh cấp nhắm mục tiêu của danh sách, chẳng hạn như chuyển từ nhắm mục tiêu cấp nhóm quảng cáo sang cấp chiến dịch, hãy tham khảo tài liệu hướng dẫn về chuyển đổi cấp độ nhắm mục tiêu để thực hiện chính xác.

Phân tích hiệu suất của danh sách

Để đánh giá hiệu quả của các phân khúc đối tượng, bạn có thể truy xuất dữ liệu hiệu suất từ các tài nguyên ad_group_audience_view hoặc campaign_audience_view. Điều này cho phép bạn theo dõi các chỉ số như conversions (chuyển đổi) hoặc cost_per_conversion (chi phí mỗi chuyển đổi), giúp bạn xác định liệu phân khúc đối tượng có đang mang lại kết quả chuyển đổi như kỳ vọng không, từ đó điều chỉnh hệ số giá thầu phù hợp.

Ví dụ về truy vấn để thu thập dữ liệu hiệu suất:

SELECT
ad_group_criterion.criterion_id,
metrics.conversions,
metrics.cost_per_conversion
FROM ad_group_audience_view

Lưu ý rằng bạn nên chờ ít nhất 2 tuần để đảm bảo rằng dữ liệu đủ chính xác trước khi tối ưu hóa giá thầu dựa trên lưu lượng truy cập và hiệu suất của tài khoản.

Việc quản lý danh sách khách hàng trên Google Ads không chỉ giúp bạn duy trì chất lượng chiến dịch mà còn góp phần tối ưu hoá chi phí và tăng cường hiệu quả quảng cáo. Bằng cách thường xuyên cập nhật danh sách, loại bỏ các khách hàng không còn phù hợp và liên tục đo lường hiệu suất, bạn sẽ nắm vững cách tối ưu hóa quảng cáo và nhắm đến đúng đối tượng mục tiêu. Với những hướng dẫn chi tiết và mẹo quản lý hiệu quả, hy vọng bạn có thể áp dụng để tối ưu danh sách khách hàng và mang lại kết quả tích cực cho chiến dịch quảng cáo của mình trên Google Ads.

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