Нумерация результатов поиска Google

Время от времени я проверяю позиции своих сайтов по тем или иным запросам в поисковой системе Google. Проблема в том, что Google не отображает в своей выдаче циферки с позициями результатов. В данной статье я хочу предложить вам очень простое и удобное решение проблемы нумерации результатов серпа в Google с применением букмарклета.

Но начну я с того, что подобная фишка уже реализована во многих браузерных расширениях: RDSbar, SERP Trends и т.д. Проблема в том, что иногда выдача меняется и приходится ждать их обновления. К тому же такие расширения нагружают браузер и зачастую делают больше чем требуется.

Букмаркле нумерации результатов поиска Google

В общем, мне было проще написать свою JavaScript надстройку в виде букмарклета. Его код выглядит следующим образом:

var num = 10,
  start = 0;

/* количество результатов в выдаче из URL-адреса */
var s_num = location.search.match(new RegExp("[\\?|&]num=([^&]*)"));
if ( s_num !== null ) {
  num = parseInt(s_num[1]);
} else {
  /* количество результатов в выдаче из куки */
  s_num = document.cookie.match(new RegExp('NR=([^:]*)'));
  if ( s_num !== null ) num = parseInt(s_num[1]);
}

/* текущий номер страницы из элемента навигации на странице */
var cur = document.getElementsByClassName('cur')[0];
if ( typeof cur !== 'undefined' ) {
  cur = parseInt( ( document.all ) ? cur.innerText : cur.textContent );
  start = ( cur - 1 ) * num;
} else {
  /* текущее начало отсчёта результатов выдачи из URL-адреса */
  var s_start = location.search.match(new RegExp("(\\?|&)start=([^&]*)"));
  if ( s_start !== null ) start = parseInt(s_start[1]);
}

/* обработка элементов выдачи по классу g */
[].forEach.call(document.getElementsByClassName('g'), function(e){
  /* нумеруем только нумеруемое */
  if ( -1 == e.parentElement.className.search(/_xse/) && -1 == e.className.search(/tpo|_Nn|no-sep|mnr-c/) ) {
    /* добавление нумерации */
    var span = document.createElement('span');
    span.setAttribute('style', 'float:left;margin-left:-40px;line-height:21.6px');
    span.innerHTML = (start + 1)+'.';
    e.insertBefore(span, e.firstChild);
    start++;
  }
});

Установка и использование

  1. перетащите эту ссылку: GN – на панель вкладок закладок Вашего браузера;
  2. задайте запрос в Google;
  3. когда появится страница выдачи, кликните букмарклет.

Для большей наглядности я даже записал видео.

Скрипт добавит на страницу элементы нумерации результатов, и вы сможете узнать позицию сайта в выдаче.

Нумерация результатов в выдаче Google
Нумерация результатов в выдаче Google

К слову, у меня есть букмарклет и для нумерации результатов в Яндекс, пользуйтесь!

На этом у меня всё. Спасибо за внимание. Если есть вопросы, задавайте их в комментариях. Удачи!

Короткая ссылка: http://goo.gl/mqYdYU

Этот букмарклет рекомендуют:

Сергей Леонтьев
Сергей Леонтьев комментирует...

Есть такой замечательный плагин Neiron Search Tools, по моему он все делает нормально.

Константин Кирилюк
Константин Кирилюк комментирует...

2Сергей Леонтьев есть замечательный плагин RDSbar, он тоже делал нормально, но структура выдачи изменилась и он ничего не делает, надо ждать обновления, а надстройку изменить может и обычный пользователь.

Павлуха
Павлуха комментирует...

Хорошее решение! Главное что простое) Меня тоже смущает отсутствие номеров в выдаче Гугла - как-то это не по-русски, когда top не пронумерован (любой: будь то поисковая выдача или список участников спортивных состязаний)

Константин Кирилюк
Константин Кирилюк комментирует...

2 Павлуха да, SEO в чём-то сродни спортивным состязаниям ;-)

Олег
Олег комментирует...

Использую SERPTrends для Мозиллы. Показывает номера позиций и динамику их изменения с последнего посещения выдачи по запросу.

Константин Кирилюк
Константин Кирилюк комментирует...

2Олег да, я тоже когда-то использовал и SERPTrends, но было дело изменился формат выдачи и он перестал работать... к слову, он завязан на URL-параметрах и иногда это создаёт баг.

Sanek508
Sanek508 комментирует...

Нумерует выдачу с карт, а они не должны нумероваться, чтобы отключить нумерацию карт нужно добавить проверку на class которых нету в выдаче карт например так
Изменить после [].forEach.call

if ( ( typeof e.id != 'undefined' ) && ( e.id == 'imagebox_bigimages') || (e.getElementsByClassName('rc').length == 0) ) { }

Константин Кирилюк
Константин Кирилюк комментирует...

2Sanek508 приведите пример поискового запроса пожалуйста.

Sanek508
Sanek508 комментирует...

любой запрос когда выводятся результаты из карты, например изготовление печатей
вот ссылка на изображение http://i058.radikal.ru/1406/fc/8e1a504612a3.jpg
Если вставить код который я написал постом выше то карта учитываться не будет.

Также в гугле не работает span.style = 'float:left;margin-left:-40px;line-height:21.6px';
и номера получаются выше текста http://i017.radikal.ru/1406/b4/addeb1a4e4f3.jpg, вставил после
span.style = 'float:left;margin-left:-40px;line-height:21.6px';

span.style['float'] = 'left';
span.style['margin-left'] = '-40px';
span.style['line-height:21.6px'];

Теперь работает и в гугле и в опере span.style = 'float:left;margin-left:-40px;line-height:21.6px'; нужно оставить чтобы работало во всех браузерах.
в итоге http://s013.radikal.ru/i323/1406/0b/7e2b8504bf31.jpg

Вот весь код:
// ==UserScript==
// @name GoogleNum
// @include *google.ru/*
// @include *google.com.ua/*
// @include *google.com/*

// ==/UserScript==

var num = 10,
start = 0,
params = location.search.substr(1).split('&');

for ( var k in params ) {
var v = params[k].split('=');
params[v[0]] = parseInt(v[1]);
}

if (
( typeof params['num'] !== 'undefined' ) &&
( !isNaN(params['num']) )
) num = params['num'];

var cur = document.getElementsByClassName('cur')[0];
if ( typeof cur === 'undefined' ) {
if (
( typeof params['start'] !== 'undefined' ) &&
( !isNaN(params['start']) )
) start = params['start'];
} else {
cur = parseInt( ( document.all ) ? cur.innerText : cur.textContent );
start = ( cur - 1 ) * num;
}

[].forEach.call(document.getElementsByClassName('g'), function(e){
if ( ( typeof e.id != 'undefined' ) && ( e.id == 'imagebox_bigimages') || (e.getElementsByClassName('rc').length == 0) ) { }
else {
var span = document.createElement('span');
span.id = 'num'+(start + 1);
span.style = 'float:left;margin-left:-40px;line-height:21.6px';
span.style['float'] = 'left';
span.style['margin-left'] = '-40px';
span.style['line-height:21.6px'];
span.innerHTML = (start + 1)+'.';
e.insertBefore(span, e.firstChild);
start++;
}
});

Sanek508
Sanek508 комментирует...

Ошибся чуть чуть - span.style['line-height'] = '21.6px';

Константин Кирилюк
Константин Кирилюк комментирует...

2Sanek508 да, адреса нужно было исключить, только блок картинок надо рассматривать как отдельное условие, т.е. нужны дополнительные круглые скобки. Париться с каждым style мне было лень, использовал setAttribute(), не очень кросбраузерно, но в Firefox и Chrome вроде работает. Параметры из URL стал брать через регулярное выражению + добавил обработку куки, там можно получить количество результатов на странице. По умолчанию num = 10, т.к. в этом случае параметра NR в куке нет. Спасибо за уточнения!

Влад Хозяинов
Влад Хозяинов комментирует...

Помогите пожалуйста, я перенес ссылку в закладки, но когда кликаю на нее в ответах гугла ничего не происходит.

Константин Кирилюк
Константин Кирилюк комментирует...

2Влад Хозяинов ага, спасибо за комментарий, минимайзер не те кавычки поставил, теперь всё работает.

Анонимный
Анонимный комментирует...

Здравствуйте! Сейчас гугл стал учитывать блок картинок в выдаче, скрипт на страницах с картинками показывает 9 результатов, нужно включить в обработку блок картинок, я в джава вооще не шарю, пробовал копался но так и не решил проблему, если не сложно, можете изменить скрипт чтоб он нумеровал картинки? И еще другая проблема, в яндексе скрипт нумерует карты, а они исключены теперь у яшки и получается если есть карты то показывает 11 позиций, еще бы тут подправить, было бы очень хорошо)

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный Приведите пожалуйста примеры запросов по которым есть описанные проблемы, а то так сложно правильно скорректировать скрипт.

Анонимный
Анонимный комментирует...

Здравствуйте! Например в гугл юа и гугл ру по запросам - "микроволновка" "шкаф купе" "смартфон" "стакан" "нокиа" и тд. выдает по 9 результатов, короче там где есть картинки везде по 9 результатов, с яшкой разобрался, карты не нумерует, а тут не смог добавить картинки в нумерацию))

Анонимный
Анонимный комментирует...

Что-то у меня не нумеруется, я тоже пробовал вчера закомментировать строку ( (typeof e.id !== 'undefined') && (e.id == 'imagebox_bigimages') ) но все равно не нумерует картинки и сейчас Ваш скрип измененный попробовал, тоже не нумерует, а у Вас нумерует?

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный Пришлось добавить удаление элементов, которые не нужно нумеровать. В основном это адреса. В противном случае надо было бы городить огород. Но теперь вроде всё норм.

Анонимный
Анонимный комментирует...

Да, картинки теперь нумерует но начало нумеровать блок "В новостях" теперь при запросах например "кроссовки" "москва" "серебро" выдает 12 результатов, вот "запара" блин, получается нет возможности нумеровать картинки а блок "в новостях" не нумеровать?

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный нет, это я просто работал над скриптом... сейчас всё норм.

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный Исключил из нумерации новости.

Анонимный
Анонимный комментирует...

Теперь нумерует отлично, спасибо!

Виталий
Виталий комментирует...

Доброго времени суток! Я вот тоже столкнулся с проблемой нумерации картинок в google и нашел ваш сайт, хотел спросить? можно ли сделать так чтобы чтобы не трогать выдачу, то есть не удалять адреса и новости но при этом нумеровать картинки?

Константин Кирилюк
Константин Кирилюк комментирует...

2Виталий можно, но это будет нагромождение кода, чего я пытаюсь избежать в букмарклетах.

Виталий
Виталий комментирует...

Ясно, я использую скрипты всегда через Greasemonkey и ваш тоже прекрасно работает через это дополнение, если вам не сложно, можете кинуть мне на емеил k_tolin@mail.ru код в котором адреса и новости будут на месте ненумерованные а картинки при этом будут нумероваться, но если это затруднит вас, тогда не нужно и прошу прощения за беспокойство!

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный и Виталий Используемая на данный момент концепция. Блоки с картинками и новостями нумеруются, но учитываются как один результат. Блоки адресов и граф знаний не нумеруются. Ничего не удаляется.

Виталий
Виталий комментирует...

Спасибо, то что нужно!

Анонимный
Анонимный комментирует...

Здравствуйте, закомментируйте в коде строку "нумеруем только нумеруемое" а то при копировании кода со страницы скрипт не работает (может кто-то не поймет в чем прикол)

Анонимный
Анонимный комментирует...

Здравствуйте! Скрипт почему-то не работает, а когда я его раньше копировала, отлично работал. Помогите пожалуйста!

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный исправил, проблемы были с кавычками в ссылке, теперь всё вроде нормально, проверяйте.

Сергей
Сергей комментирует...

Здравствуйте, то ли это только у меня то ли у всех, но скрипт не нумерует сейчас основную выдачу, только напротив картинок ставит цифру "1" и все, даже если они на 10 позиции и больше никакой нумерации нет на любых страницах, опять наверное гугл сменил названия классов или что это может быть?((

Константин Кирилюк
Константин Кирилюк комментирует...

2Сергей да, Google снова сменил структуру выдачи, заменив LI теги на DIV в списке OL. Что тут можно сказать? Умом Google не понять, будем править.

Сергей
Сергей комментирует...

Все снова работает как нужно, спасибо Вам большое за Вашу работу, Вы здорово выручаете многих людей!

Анонимный
Анонимный комментирует...

Если скопировать скрипт со страницы то он не работает только букмарклет нумерует...

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный: спасибо, поправил.

Анонимный
Анонимный комментирует...

Хорошо нумерует ваш скрипт, спасибо, а есть ли возможность убрать "определения в интернете" с нумерации? Вот например запросы - "шлагбаум, динамит, водопровод" по подобным запросам в выдаче появляются "определения в интернете" скрипт их нумерует и получается 11 результатов...

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный исключил определения из нумерации, пробуйте.

Анонимный
Анонимный комментирует...

Да, отлично, теперь не нумерует определения, спасибо!

Анонимный
Анонимный комментирует...

На второй странице и т.д. вместо нумерации стоит NAN, что делать дрУги? Опера 12. Сменить браузер не вариант.

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный Ага, есть такое дело в oldschool Opera, надо будет поработать.

Анонимный
Анонимный комментирует...

Константин, если ещё не пропал интерес к этому букмарклету, вот скрин после его отработки https://drive.google.com/file/d/0B22BUlIBBm7rM25GQ2NScy1RSjg/view?usp=drivesdk
Google настроен на выдачу 10 результатов. Получается, не нумеруются позиции после первой ("спрятанные" интересным способом поисковиком) и картинки.

Константин Кирилюк
Константин Кирилюк комментирует...

2Анонимный Х.з. почему так… в целом гугл не должен причислять картинки и т.п. к основной выдаче… а они хуй скажет что и как на самом деле, потому не стоит заморачиваться. В целом, следующая страница будет начинаться нумироваться с 11й позиции так что всё норм.

Евгений Калинский
Евгений Калинский комментирует...

Здравствуйте. Добавил скрипт в расширение Tampermonkey как пользовательский скрипт и теперь автоматически нумеруется при загрузке страницы! Даже нажимать не надо. Спасибо за функцию.