Google Ads (AdWords Display)

30/11/2019

Hãy cài đặt thẻ click và thẻ hiển thị cho phương tiện bên ngoài Facebook để có thể hiểu rõ hơn về lộ trình chuyển đổi. Sau đó, nhập dữ liệu đối ghép để làm cho bảng điều khiển và báo cáo của bạn dễ hiểu. Ví dụ: khi sử dụng quy trình đối ghép chi phí, bạn có thể xem số liệu về chi phí và lợi nhuận trên chi tiêu quảng cáo (ROAS).

Trong Phân bổ trên Facebook:

  1. Đi tới Cài đặt, sau đó nhấp vào Thêm nền tảng.
  2. Nhấp vào Thêm nền tảng.
  3. Chọn Google Ads (AdWords Display) từ danh sách, sau đó nhấp vào Chọn.
  4. Làm theo hướng dẫn trên màn hình để chuyển đến nền tảng, cài đặt thẻ và thiết lập quy trình đối ghép chiến dịch cũng như nhập quy trình đối ghép chi phí. Bạn cũng có thể tham khảo hướng dẫn bên dưới.

Cài đặt thẻ

Cài đặt thẻ động ở cấp độ nhà quảng cáo để tự động ghi lại dữ liệu về lượt hiển thị và lượt click cho tất cả các chiến dịch của bạn. Nếu chọn theo dõi các chiến dịch riêng lẻ, thì bạn cần cài đặt thẻ theo cách thủ công trên từng chiến dịch mới.

Nếu cần theo dõi các thông số tùy chỉnh như ID nội dung, bạn có thể tùy chỉnh thẻ trong quá trình tạo thẻ trên Phân bổ của Facebook. Nếu chọn thêm sau, bạn sẽ phải cài đặt lại thẻ.

Lưu ý: Nền tảng Search chỉ có thể chứa một vị trí quảng cáo cho mỗi chiến dịch. Hãy tìm hiểu thêm về các giới hạn đối với thẻ.

There is currently no option to install impression tags in Google Ads. You'll need to generate campaign-level impression tags through a bulk import and contact the Google 3PAS team for implementation.

You can install click tags in your Google Ads Account Settings, under Tracking.

Thông tin này có hữu ích không?
  1. Log in to Google Ads.
  2. Generate a report for your Google Ads display campaigns with the following information:

    Account Name, Account ID, Campaign Name, Campaign ID
  3. Click Import Site-Served Ads below to download the import template.
  4. Copy the rows from your generated report into the template, then upload the template. Click Import.
  5. Download the resulting file you received in your notifications.
  6. Contact Google 3PAS to request implementation of impression tags for your Google Ads display campaigns.
Thông tin này có hữu ích không?

Note: If you have an existing template, you'll need to chain, or concatenate, the click tags together. Facebook-provided click tags are auto-enabled to redirect to other templates that are third party redirects. The final chained click tag would appear like the example below. Please use the URL preview functionality to ensure the chaining of templates works.

https://ad.atdmt.com/s/go;adv=1111111111111;c.a=12345;p.a=12345; a.a=12345;qpb=1;cache=12345;?h=https://my.existing.clicktag.com/...

  1. Log in to Google Ads.
  2. From the navigation menu at the top, click All campaigns.
  3. From the menu on the left, click Settings, then click Account Settings.
  4. Click Tracking.
  5. In the Tracking template field, paste the Facebook-provided click tag.
  6. Click TEST to ensure the tag is set up correctly.
  7. After verifying that the tag is working correctly, click Save.

Note: The click tag provided by Facebook is compatible with parallel tracking in Google Ads.

Thông tin này có hữu ích không?

Nhập dữ liệu chi phí và đối ghép

Nhập dữ liệu đối ghép để làm cho bảng điều khiển và báo cáo của bạn dễ hiểu. Khi sử dụng quy trình đối ghép chiến dịch, bạn có thể nhìn thấy tên vị trí quảng cáo và chiến dịch thay vì số ID. Với quy trình đối ghép chi phí, bạn có thể xem số liệu chi phí và lợi nhuận trên chi tiêu quảng cáo (ROAS).

Nhập tự động (Nên dùng)

  1. Go to Google Ads.
  2. From the navigation menu at the top right, click Tools.
  3. Under Bulk Actions, click Scripts.
  4. Click + to create a new script. Enter a name for the script.
  5. In the field that opens, paste the Facebook-provided script.
    • Google Ads Manager Account (MCC)
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com, cost++@atlas.facebook.com';
      
      function main() {
        var accountSelector = MccApp.accounts();
        accountSelector.executeInParallel("processIndividualAccount");
      }
      
      function processIndividualAccount() { 
        Logger.log('Starting report generation for account - ' + AdWordsApp.currentAccount().getName());
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
      
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Cost, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks, AverageCpc ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
      while (display_campaigns.hasNext()) {
        var display_campaign = display_campaigns.next();
        display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, campaignId, campaignName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
            csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
    • Google Ads Account
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com, cost++@atlas.facebook.com';
      
      function main() {
        Logger.log('Starting report generation');
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Cost, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks, Cost ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
        while (display_campaigns.hasNext()) {
          var display_campaign = display_campaigns.next();
          display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cost = row['Cost'];
          cost = cost.replace(/,/g,'');
          var result = [yesterday, campaignId, campaignName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
  6. Click Preview to verify that the script is valid. If you're prompted for permission to run the script, click Authorize Now.
  7. Click Save, then click Close.
  8. Hover over the Frequency column to the right of the script you created to edit the frequency.
  9. Select Daily and 6:00 AM local time. Click Save.
Thông tin này có hữu ích không?
  1. Go to Google Ads.
  2. From the navigation menu at the top right, click Tools.
  3. Under Bulk Actions, click Scripts.
  4. Click + to create a new script. Enter a name for the script.
  5. In the field that opens, paste the Facebook-provided script.
    • Google Ads Manager Account (MCC)
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com';
      
      function main() {
        var accountSelector = MccApp.accounts();
        accountSelector.executeInParallel("processIndividualAccount");
      }
      
      function processIndividualAccount() { 
        Logger.log('Starting report generation for account - ' + AdWordsApp.currentAccount().getName());
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
      
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
      while (display_campaigns.hasNext()) {
        var display_campaign = display_campaigns.next();
        display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, campaignId, campaignName, impressions, clicks, timeZone];
          hasValidRows = true;
            csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
    • Google Ads Account
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = 'mapping++@atlas.facebook.com';
      
      function main() {
        Logger.log('Starting report generation');
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Cost, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
        while (display_campaigns.hasNext()) {
          var display_campaign = display_campaigns.next();
          display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, campaignId, campaignName, impressions, clicks, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
  6. Click Preview to verify that the script is valid. If you're prompted for permission to run the script, click Authorize Now.
  7. Click Save, then click Close.
  8. Hover over the Frequency column to the right of the script you created to edit the frequency.
  9. Select Daily and 6:00 AM local time. Click Save.
Thông tin này có hữu ích không?

Nhập thủ công

  1. Go to Google Ads.
  2. From the navigation menu at the top right, click Tools.
  3. Under Bulk Actions, click Scripts.
  4. Click + to create a new script. Enter a name for the script.
  5. In the field that opens, paste the Facebook-provided script.
  6. In the second line of the script, replace RECIPIENT EMAIL with the email address where you'd like to receive the report. Be sure to leave the single quotation marks around the email address exactly as they appear in the script.
    • Google Ads Manager Account (MCC)
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = '[RECIPIENT EMAIL]';
      
      function main() {
        var accountSelector = MccApp.accounts();
        accountSelector.executeInParallel("processIndividualAccount");
      }
      
      function processIndividualAccount() { 
        Logger.log('Starting report generation for account - ' + AdWordsApp.currentAccount().getName());
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
      
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Cost, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks, AverageCpc ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
      while (display_campaigns.hasNext()) {
        var display_campaign = display_campaigns.next();
        display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, campaignId, campaignName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
            csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
    • Google Ads Account
      // Comma-separated list of recipients. Comment out to not send any emails.
      var RECIPIENT_EMAIL = '[RECIPIENT EMAIL]';
      
      function main() {
        Logger.log('Starting report generation');
        //Get headers
        var csv = 'Date, Campaign ID, Campaign, Impressions, Clicks, Cost, Timezone';
      
        // Generate report
        var report = AdWordsApp.report(
          'SELECT CampaignId, CampaignName, CampaignStatus, Impressions, Clicks, Cost ' +
          'FROM CAMPAIGN_PERFORMANCE_REPORT ' +
          'WHERE CampaignStatus=ENABLED ' +
          'DURING YESTERDAY');
        var display_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = DISPLAY").get();
        var display_campaign_ids = {};
        while (display_campaigns.hasNext()) {
          var display_campaign = display_campaigns.next();
          display_campaign_ids[display_campaign.getName()] = display_campaign.getId();
        }
      
        var rows = report.rows();
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        var now = new Date();
        var timeZone = AdWordsApp.currentAccount().getTimeZone();
        var yesterday = Utilities.formatDate(new Date(now.getTime() - MILLIS_PER_DAY), timeZone, 'MM/dd/yyyy');
        var hasValidRows = false;
        while (rows.hasNext()) {
          var row = rows.next();
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (display_campaign_ids[campaignName] == undefined) {
            continue; 
          }
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cost = row['Cost'];
          cost = cost.replace(/,/g,'');
          var result = [yesterday, campaignId, campaignName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords display campaign performance report', '', {attachments:compressedCSV} ); } }
  7. Click Preview to verify that the script is valid. If you're prompted for permission to run the script, click Authorize Now.
  8. Click Save, then click Close.
  9. Hover over the Frequency column to the right of the script you created to edit the frequency.
  10. Select Daily and 6:00 AM local time. Click Save.
Thông tin này có hữu ích không?

Mỗi khi thêm hay đổi tên chiến dịch, vị trí quảng cáo hoặc nhóm quảng cáo, bạn cần nhập dữ liệu đối ghép theo cách thủ công. Bạn nên nhập ít nhất một lần mỗi tuần để duy trì tính nhất quán.

Trong Phân bổ trên Facebook:

  1. Đi tới Cài đặt, sau đó nhấp vào Thêm nền tảng.
  2. Nhấp vào tên của nền tảng mà bạn đang nhập dữ liệu đối ghép để xem thêm chi tiết.
  3. Trong phần Nền tảng, nhấp vào Nhập > Dữ liệu đối ghép.
  4. Tải lên báo cáo chứa dữ liệu đối ghép.
Thông tin này có hữu ích không?

Để báo cáo chính xác, bạn nên nhập dữ liệu chi phí ít nhất mỗi tuần một lần.

Trong Phân bổ trên Facebook:

  1. Đi tới Cài đặt, sau đó nhấp vào Thêm nền tảng.
  2. Nhấp vào tên của nền tảng mà bạn đang nhập chi phí để xem thêm chi tiết.
  3. Trong phần Nền tảng, hãy nhấp vào Nhập > Dữ liệu chi phí.
  4. Tải lên báo cáo chứa dữ liệu chi phí.
Thông tin này có hữu ích không?

Khắc phục sự cố

Tập lệnh AdWords, dùng để thiết lập báo cáo định kỳ cho hoạt động nhập chi phí và đối ghép tự động trong Phân bổ trên Facebook, của một số tài khoản AdWords có thể hết thời gian chờ do tập lệnh Adwords có giới hạn thời gian thực hiện tối đa là 30 phút. Hãy tìm hiểu thêm tại https://developers.google.com/adwords/scripts/docs/limits.

Thời gian thực hiện của tập lệnh phụ thuộc vào số tài khoản AdWords (nếu chạy tập lệnh MCC) và số thực thể trong tài khoản AdWords.

Nếu gặp phải vấn đề này, bạn có thể giảm số thực thể cần xử lý trong tập lệnh. Các ví dụ sau minh họa cách sửa đổi tập lệnh được cung cấp:

Google AdWords (Tìm kiếm)

  • Ban đầu: 'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED'
  • Đã sửa đổi: 'WHERE Impressions > 0 and CampaignStatus=ENABLED and AdGroupStatus=ENABLED'

Google AdWords (Hiển thị)

  • Ban đầu: 'WHERE CampaignStatus=ENABLED'
  • Đã sửa đổi: 'WHERE Impressions > 0 and CampaignStatus=ENABLED'

Nếu vẫn thấy các chiến dịch chưa đối ghép trong Phân bổ trên Facebook, thì bạn cũng có thể chạy bản sao của tập lệnh để xử lý mệnh đề trong đó 'Impressions = 0'. Hãy xem ví dụ bên dưới:

Google AdWords (Tìm kiếm)

  • Ban đầu: 'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED'
  • Đã sửa đổi: 'WHERE Impressions=0 and CampaignStatus=ENABLED and AdGroupStatus=ENABLED'
Thông tin này có hữu ích không?

* Nguồn: Facebook