Остановить поисковые системы для индексации определенных частей страницы

У меня есть страница php, которая дает книгу, позволяющую сказать 100 страниц. Каждая страница имеет определенный URL (например, /my-book/page-one, /my-book/page-two и т.д.).

При переворачивании страниц я меняю URL-адрес, используя API истории, используя url.js.

Поскольку весь контент книги отображается с серверной стороны, проблема в том, что контент индексируется поисковыми системами (особенно я имею в виду Google), но URL-адреса неверны (например, он находит фрагмент на page-two, но url page-one).

Как остановить поисковые системы (по крайней мере, Google), чтобы индексировать весь контент на странице, но индексировать только видимую страницу книги?

Будет ли он работать, если я создам контент по-другому: например, <div data-page-number="1" data-content="Lorem ipsum..."></div>, а затем на стороне JavaScript, чтобы изменить его в нужном формате? Это сделает страницу медленнее, и на самом деле я не уверен, что Google не будет индексировать измененный контент с помощью JavaScript.

Код выглядит следующим образом:

<div data-page="1">Page 1</div>
<div data-page="2">Page 2</div>
<div data-page="3" class="current-page">Page 3</div>
<div data-page="4">Page 4</div>
<div data-page="5">Page 5</div>

Тогда только видимый div является .current-page. Один и тот же контент передается по нескольким URL-адресам, потому что это необходимо для того, чтобы пользователь мог перелистывать страницы.

Например, /book/page/3 будет отображать этот фрагмент HTML, а /book/page/4 отображает одно и то же, единственное отличие - это класс current-page, который добавляется к четвертому элементу.

Google индексировал разные URL-адреса, но он сделал это неправильно: например, фрагмент Page 5 ссылается на /book/page/2, который отображает пользователю Page 2 (not Page 5).

Как сообщить Google (и другим поисковым системам) Мне интересно только индексировать содержимое в .current-page?

Ответ 1

Сохраните содержимое в файле JSON, который вы не визуализируете в HTML. С сервера используйте только правильную страницу: содержимое, которое отображается пользователю.

Когда пользователь нажимает кнопки (ссылки на предыдущую/следующую страницу и т.д.), отрисуйте с помощью JavaScript содержимое, которое у вас есть в файле JSON, и измените URL-адрес, как вы уже делаете.

Таким образом, вы знаете, что вы всегда подаете с сервера правильный контент, и бот Google явно индексирует страницы правильно.

Ответ 2

Как я понял, проблема в том, что у вас одинаковый контент для многих URL-адресов. Как:

www.my-awesome-domain.com/my-book/page/42

www.my-awesome-domain.com//my-book/page/7

И видимое содержимое страницы настраивается JavaScript, этот пользователь выполняет, когда он нажимает на некоторые элементы вашего сайта.

В этом случае вам нужно сделать 2 вещи:

  • Отметьте свой URL как канонические страницы любым из способов, описанных в этом документе Google: https://support.google.com/webmasters/answer/139066?hl=en
  • Вам нужно добавить функцию, которую каждая страница будет загружать в одно и то же состояние после полного обновления страницы, например, вы можете использовать хеш-параметр при навигации в качестве desiribed в статье здесь: или вот обзор техники

Сегодня google bot выполняет JavaScript как объявлено в своем официальном блоге: https://webmasters.googleblog.com/2015/10/deprecating-our-ajax-crawling-scheme.html

Итак, если вы достигнете правильного поведения страницы при нажатии Refresh (F5) и укажите свойство канонических страниц, страницы будут правильно сканироваться, и когда вы перейдете по ссылке, вы перейдете на связанную страницу.

Если вам нужно больше советов, как это сделать в url.js Пожалуйста, напишите еще один вопрос (так что он будет правильно документирован для других), и я буду рад помочь.

Ответ 3

Ответ прост: вы не можете этого сделать. Нет технической возможности сохранять один и тот же контент под разными URL-адресами и просить поисковые системы индексировать только его часть.

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

Вы можете найти "хак", который использует специальные теги, используемые для Google Search Appliance: googleon и googleoff.

https://www.google.com/support/enterprise/static/gsa/docs/admin/70/gsa_doc_set/admin_crawl/preparing.html

Единственная проблема - это, скорее всего, не будет работать с Google Bot (по крайней мере, никто не гарантирует это) или любой другой поисковой системой.

Ответ 4

Если вы настроили таргетинг именно на Google, вы можете использовать директиву googleoff

См. Исключение нежелательного текста из индекса

Отключает все атрибуты. Текст между тегами не индексируется, не связан с текстом привязки или не используется для фрагмента.

<!--googleoff: all--><div data-page="1">Page 1</div>
<div data-page="2">Page 2</div><!--googleon: all-->
<div data-page="3" class="current-page">Page 3</div>
<!--googleoff: all--><div data-page="4">Page 4</div>
<div data-page="5">Page 5</div><!--googleon: all-->

Если вы хотите скрыть текст из другой поисковой системы, вы должны использовать альтернативу javascript, например, загрузку следующей или предыдущей страницы в DOM из запроса ajax, когда пользователь нажимает кнопку.

Ответ 5

Я не думаю, что вы сможете достичь того, что ищете.

Я не могу увидеть, как влияет файл robots.txt. Канонические теги не работают на div.

Google говорил о таких сайтах в прошлом и сделал несколько предложений для индексации, вот несколько ссылок, которые могут помочь:

https://www.seroundtable.com/seo-single-page-12964.html

https://www.seroundtable.com/google-on-crawling-javascript-sites-progressive-web-apps-21737.html