Могут ли страницы, которые интенсивно используют AJAX, быть дружественными для поисковых систем? - PullRequest
2 голосов
/ 05 октября 2009

Я думаю, что я имею в виду, если я создаю сайт, использующий AJAX для загрузки некоторого контента, который я также хочу, чтобы поисковые системы находили - если я заставляю страницу работать без sans-javascript (скажем, когда javascript нет , ссылка идет на site.com?c=somecontent вместо вызова функции с $("#content").load("somecontent.html");), будет ли поисковая система переходить по не-javascript ссылке и сможет ли индексировать сайт хорошо?

Полагаю, это сработает, если браузеры с поддержкой javascript, следовавшие по ссылке поисковой системы на ссылку ?c=somecontent, будут по-прежнему нормально использовать сайт, верно?

Это действительно сложная задача или ее можно сделать относительно легко, если сайт правильно структурирован?

Ответы [ 6 ]

2 голосов
/ 05 октября 2009

В дополнение к предыдущим ответам.

Вы можете проверить, является ли запрос через AJAX, результат отображения в соответствии с ним (то есть данные JSON, если AJAX, полная страница HTML, если нет). В PHP скрипт проверки выглядит как

  function isAjax() {
      return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
         ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'));
  }

Конечно, найдется решение для технологии, которую вы используете на стороне сервера (Ruby / Python / ASP).

2 голосов
/ 05 октября 2009

Если ваша ссылка выглядит примерно так:

<a href="http://site.com?c=somecontent" 
   onclick="Javascript:$('#content').load('somecontent.html'); return false;">
     Some link
</a>

Это изящно ухудшится, и поисковые системы будут счастливы.

Одна из проблем, с которыми вы сталкиваетесь, - это когда пользователь, у которого включен Javascript, перемещается по вашему сайту, местоположение в адресной строке не изменится. Это можно преодолеть, установив в функции onclick значение window.location.hash для обновления хеш-части URL-адреса в зависимости от страницы, на которой находится посетитель. Затем при загрузке каждой полной страницы сценарий должен проверить, соответствует ли хеш текущей странице, и, если нет, переключиться на страницу, указанную хешем, с помощью вызова AJAX.

2 голосов
/ 05 октября 2009

Просто добавьте: Если вы заметили, как работает Facebook - AJAX работает, если Javascript включен, и если Javascript отключен (например, роботы), он все равно будет работать.

Сделайте что-то подобное в своих ссылках (например, пейджинг):

<a href="view.php?t=231&p=2" onclick="loadpage(2); return false;">2</a>
<script type="text/javascript">/* <![CDATA[ */

function loadpage(p){
$("loader").load("view.php?c=pageonly&t=231&p="+p);
}

/* ]]> */</script>

Таким образом, ключевым моментом является проектирование таким образом, чтобы AJAX работал в современных браузерах, хотя страницы все еще работают, когда у вас отключен Javascript.

1 голос
/ 05 октября 2009

Это может быть проблематично, так как ваш маленький фрагмент страницы попадет в индекс.

Если вам это сойдет с рук, гораздо проще "подделать" ajax с помощью старого старого DHTML.

<div id="content-display"></div>

<div id="content-1">Some content</div>
<div id="content-2">Some other content</div>

<style>
#content-1 { display:none; }
#content-2 { display:none; }
</style>

<script>
displayContent = function(contentId){
    $('#content-display').update($(contentId).innerHTML);
}
</script>

Теперь у вас есть весь ваш контент, видимый для поисковых систем, все с одинаковым (и правильным) URI, но для пользователей с включенным Javascript он действует как решение AJAX (но быстрее после начальной загрузки, которая немного медленнее).

Теперь, если у вас есть тонна контента, вам придется подумать о чем-то более умном. Но если весь ваш контент весит относительно мало (не забудьте убедиться, что ваш сервер gzip-кодирует контент), эта настройка предпочтительнее.

В противном случае, если у вас есть сотни килобайт (или больше) текстового контента, вам придется стать хитрее. Ваша первоначальная мысль очень правильная.

<a href="/some/page.html" onclick="$('#content').load('/some/page.html')">
LinkyText
</a>

Обычно будет делать то, что, как вы думаете, будет. Проблема, конечно, в том, что «/some/page.html» будет в результатах поиска. Вы могли бы попробовать сделать хитрые вещи на стороне сервера (например, проверить рефереры и перенаправить обратно на «главную» страницу), но я не уверен, что это не ящик Пандоры.

Надеюсь, кто-нибудь придет с другим ответом, который решит эту проблему. Если я что-нибудь придумаю, я отредактирую это.

1 голос
/ 05 октября 2009

лучший способ сделать это - создать сайт без ajax и применить SEO-методы. затем, когда работает не-ajax-версия, добавьте класс, называемый «dynamic-link», или что-то еще, к ссылкам, которые вы хотите быть ajax-link. и обрабатывать события клика по этим ссылкам. поэтому, когда роботы сканируют сайт, им есть на что вернуться.

0 голосов
/ 05 марта 2011

Взгляните на одностраничный интерфейсный манифест , сложная часть которого состоит в том, чтобы предоставить "снимки HTML" боту-сканеру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...