Google Ads (AdWords Search)

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 Search) 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ẻ.

  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.
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. In the Tracking template field, paste the Facebook-provided click tag.
  2. Click TEST to ensure the tag is set up correctly.
  3. 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 search report generation for account - ' + AdWordsApp.currentAccount().getCustomerId ());
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Cost, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') { 
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
        var shopping_campaign = shopping_campaigns.next();
        campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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 search report generation');
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Cost, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
             var shopping_campaign = shopping_campaigns.next();
            campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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 search report generation for account - ' + AdWordsApp.currentAccount().getName());
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') { 
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
        var shopping_campaign = shopping_campaigns.next();
        campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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 search report generation');
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
             var shopping_campaign = shopping_campaigns.next();
            campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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 search report generation for account - ' + AdWordsApp.currentAccount().getName());
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Cost, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') { 
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
        var shopping_campaign = shopping_campaigns.next();
        campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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 search report generation');
        processCampaigns('search');
        processCampaigns('shopping');
      }
      
      function processCampaigns(type) {
        Logger.log('Processing ' + type + ' campaigns');
      
        var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
        // Headers
        var csv = 'Date, Keyword, Campaign ID, Campaign, Ad group ID, Ad group, Impressions, Clicks, Cost, Timezone';
        var report;
        var campaign_ids_map = {};
      
        if (type == 'search') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT Criteria, CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM KEYWORDS_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY');
          var search_campaigns = AdWordsApp.campaigns().withCondition("AdvertisingChannelType = SEARCH").get();
          while (search_campaigns.hasNext()) {
            var search_campaign = search_campaigns.next();
            campaign_ids_map[search_campaign.getName()] = search_campaign.getId();
          }
        } else if (type == 'shopping') {
          // Generate report
          var report = AdWordsApp.report(
            'SELECT CampaignId, CampaignName, CampaignStatus, AdGroupId, AdGroupName, AdGroupStatus, Impressions, Clicks, AverageCpc ' +
            'FROM SHOPPING_PERFORMANCE_REPORT ' +
            'WHERE CampaignStatus=ENABLED and AdGroupStatus=ENABLED ' +
            'DURING YESTERDAY'); 
          var shopping_campaigns = AdWordsApp.shoppingCampaigns().get();
          while (shopping_campaigns.hasNext()) {
             var shopping_campaign = shopping_campaigns.next();
            campaign_ids_map[shopping_campaign.getName()] = shopping_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 keyWordName = '';
          if (type == 'search') {
            keyWordName = row['Criteria'];
            keyWordName = keyWordName.replace(/,/g,'');
          }
          var campaignName = row['CampaignName'];
          campaignName = campaignName.replace(/,/g,'');
          var campaignId = row['CampaignId'];
          if (campaign_ids_map[campaignName] == undefined) {
            continue; 
          }
          var adGroupId = row['AdGroupId'];
          var adGroupName = row['AdGroupName'];
          adGroupName = adGroupName.replace(/,/g,'');
          var clicks = row['Clicks'];
          var impressions = row['Impressions'];
          var cpc = row['AverageCpc'];
          cpc = cpc.replace(/,/g,'');
          var cost = cpc * clicks;
          var result = [yesterday, keyWordName, campaignId, campaignName, adGroupId, adGroupName, impressions, clicks, cost, timeZone];
          hasValidRows = true;
          csv += '
      ' + result.join(','); } if(RECIPIENT_EMAIL && hasValidRows == true) { var reportName = 'adwords_'+ type + '_report_' + AdWordsApp.currentAccount().getCustomerId(); var compressedCSV = Utilities.zip([Utilities.newBlob(csv,'application/octet-stream').setName(reportName + '.csv')], reportName +'.zip'); MailApp.sendEmail( RECIPIENT_EMAIL, 'Adwords search 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