AdWords
Сейчас в сети: 325
Сейчас в сети: 325
Советы и вопросы по использованию скриптов AdWords
Подсказки
star_border
Ответить

Битые ссылки

Магистр ✭

Добрый день!

 

http://www.freeadwordsscripts.com/2013/04/report-on-broken-urls-in-your-account.html

этот один и тот же скрипт как оказалось растиражирован по всему рунету

 

но он не работает! )) он отрабатывает  - и не находит битые ссылки

кому-нибудь удавалось его удачно использовать?

1 Ответ экспертаverified_user

Re: Битые ссылки

Ведущий участник
Удавалось.Перед этим - убедитесь, что сервер правильно отдает ошибку
C уважением,
Павел

Re: Битые ссылки

Магистр ✭
проверял например этим (и не только):
http://mainspy.ru/otvet_servera

ошибка 404

Re: Битые ссылки

Магистр ✭
там в коде есть строка:
Logger.log("Testing url: "+url);

т.е. должно выводиться в Журнал хоть что-то в процессе выполнения скрипта.
а у меня журнал всегда пуст. почему? обьявления-кампании включены - проблема не в этом

Re: Битые ссылки

Студент ✭ ✭
Использую старшую версию этого скрипта для MCC http://www.freeadwordsscripts.com/2014/04/monitor-broken-links-using-mcc-level.html
Все работает. Попробуйте подключить скрипт по моей ссылке.

Re: Битые ссылки

Магистр ✭
выдает ошибку
ReferenceError: "MccApp" is not defined.

его что только из под аккаунта MCC можно запускать?

Re: Битые ссылки

Студент ✭ ✭
Да.
Скрипт по моей ссылке работает с МСС. Соответственно устанавливается на уровне управляющего аккаунта.
Скрипт по вашей ссылке работает с отдельными аккаунтами.
Я настраивал только тот, который с МСС работает. Все заработало с первой попытки, без проблем.

Re: Битые ссылки

Аспирант ✭
Данный скрипт нужно немного изменить, так как скрипты AdWords больше не поддерживают "getDestinationUrl()", во всем скрипте его нужно изменить на "urls.getFinalUrl()" и все заработает)

function main() {
// You can add more if you want: http://goo.gl/VhIX
var BAD_CODES = [404,500];
var TO = ['email@example.com'/*,'email_address_2@example.com'*/];
var SUBJECT = 'Broken Url Report - ' + _getDateString();
var HTTP_OPTIONS = {
muteHttpExceptions:true
};

//Let's look at ads and keywords for urls
var iters = [
//For Ad Level Urls
AdWordsApp.ads()
.withCondition("Status = 'ENABLED'")
.withCondition("AdGroupStatus = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.withCondition("Type = 'TEXT_AD'")
.get(),
//For Keyword Level Urls
AdWordsApp.keywords()
.withCondition("Status = 'ENABLED'")
.withCondition("FinalUrl != ''")
.withCondition("AdGroupStatus = 'ENABLED'")
.withCondition("CampaignStatus = 'ENABLED'")
.get()
];

var already_checked = {};
var bad_entities = [];
for(var x in iters) {
var iter = iters[x];
while(iter.hasNext()) {
var entity = iter.next();
if(entity.urls.getFinalUrl() == null) { continue; }
var url = entity.urls.getFinalUrl();
if(url.indexOf('{') >= 0) {
//Let's remove the value track parameters
url = url.replace(/\{[0-9a-zA-Z]+\}/g,'');
}
if(already_checked[url]) { continue; }
var response_code;
try {
Logger.log("Testing url: "+url);
response_code = UrlFetchApp.fetch(url, HTTP_OPTIONS).getResponseCode();
} catch(e) {
//Something is wrong here, we should know about it.
bad_entities.push({e : entity, code : -1});
}
if(BAD_CODES.indexOf(response_code) >= 0) {
//This entity has an issue. Save it for later.
bad_entities.push({e : entity, code : response_code});
}
already_checked[url] = true;
}
}
var column_names = ['Type','CampaignName','AdGroupName','Id','Headline/KeywordText','ResponseCode','DestUrl'];
var attachment = column_names.join(",")+"\n";
for(var i in bad_entities) {
attachment += _formatResults(bad_entities[i],",");
}
if(bad_entities.length > 0) {
var options = { attachments: [Utilities.newBlob(attachment, 'text/csv', 'bad_urls_'+_getDateString()+'.csv')] };
var email_body = "There are " + bad_entities.length + " urls that are broken. See attachment for details.";

for(var i in TO) {
MailApp.sendEmail(TO[i], SUBJECT, email_body, options);
}
}
}

//Formats a row of results separated by SEP
function _formatResults(entity,SEP) {
var e = entity.e;
if(typeof(e['getHeadline']) != "undefined") {
//this is an ad entity
return ["Ad",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getHeadline(),
entity.code,
e.urls.getFinalUrl()
].join(SEP)+"\n";
} else {
// and this is a keyword
return ["Keyword",
e.getCampaign().getName(),
e.getAdGroup().getName(),
e.getId(),
e.getText(),
entity.code,
e.urls.getFinalUrl()
].join(SEP)+"\n";
}
}

//Helper function to format todays date
function _getDateString() {
return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");

Re: Битые ссылки

Магистр ✭
выяснилась новая проблема - и в скрипте который нашел я, и в скрипте Dmytro Tonkikh не обрабатываются ссылки с utm метками - просто выдается ошибка

Invalid argument: http://www....

можно ли как то решить такую проблему? я так понимаю функция getResponseCode() не справляется с ютм метками?

Re: Битые ссылки

Студент ✭
Для этого в предыдущей версии есть функция cleanUrl, которая убирает все параметры.