Google Ads自动移除过期附加链接脚本运行无效果求助
问题排查及修复方案
原脚本核心错误点
- 方法调用遗漏括号:
getEndDate、removeSitelink都是方法,必须加()才会执行,不加的话只是引用函数本身,不会返回结果也不会执行操作 - 逻辑层级错误:不能直接对整个附加链接集合调用
getEndDate(),需要遍历每一条附加链接,单独获取其结束日期判断 - 条件逻辑错误:原判断用了
||(或),且只处理了第一条附加链接,没有遍历所有符合条件的链接 - 日期格式不匹配:Google Ads接口返回的结束日期是
{year: 数值, month: 数值, day: 数值}格式的对象,不能直接和Date对象比较,需要先转成标准Date对象
修正后可用脚本
function main() { // 获取当前日期,时间归零避免同一天内的时间差导致判断错误 const today = new Date(); today.setHours(0, 0, 0, 0); // 替换为你要处理的广告系列名称,也可去掉withCondition批量处理所有广告系列 const campaignIterator = AdsApp.campaigns() .withCondition("CampaignName = 'YOUR CAMPAIGN NAME HERE'") .get(); // 遍历所有符合条件的广告系列 while (campaignIterator.hasNext()) { const campaign = campaignIterator.next(); // 获取该广告系列下的所有附加链接 const sitelinkIterator = campaign.extensions().sitelinks().get(); // 遍历该广告系列下的每一条附加链接 while (sitelinkIterator.hasNext()) { const sitelink = sitelinkIterator.next(); // 获取当前附加链接的结束日期 const endDateObj = sitelink.getEndDate(); // 只处理设置了结束日期的附加链接 if (endDateObj) { // 接口返回的month从1开始计数,Date对象的month从0开始,转换时要减1 const sitelinkEndDate = new Date(endDateObj.year, endDateObj.month - 1, endDateObj.day); sitelinkEndDate.setHours(0, 0, 0, 0); // 结束日期早于今天即判定为过期,执行移除 if (sitelinkEndDate < today) { campaign.extensions().removeSitelink(sitelink); // 如需日志可取消下一行注释,运行后在脚本日志中查看操作记录 // Logger.log(`已移除广告系列「${campaign.getName()}」下的过期附加链接:${sitelink.getLinkText()},结束日期:${sitelinkEndDate.toLocaleDateString()}`); } } } } }
使用注意事项
- 首次运行前建议先注释掉移除操作的代码,打开日志输出先跑一遍,确认要移除的链接符合预期后再正式执行,避免误删
- 如需批量处理全账户所有广告系列,删掉
.withCondition("CampaignName = 'YOUR CAMPAIGN NAME HERE'")这行即可 - 可在Google Ads脚本设置中开启定时运行,设置为每天执行一次即可实现自动清理过期附加链接
内容的提问来源于stack exchange,提问作者Jack_Skelter
相关产品推荐
相关产品推荐

