У меня есть http://mysite.com/index.php .
И подменю
Но я хочу http://mysite.com/index.php обрабатывать каждый запрос и просто изменять контент с помощью запроса Ajax. Таким образом, сайт загружает только часть контента и намного быстрее и удобнее в навигации.
Проблема здесь в SEO, потому что единственный URL-адрес google будет выглядеть http://mysite.com/index.php, и я хотел бы связать http://mysite.com/about-us с контентом About Us , http: //mysite.com/product к содержимому продуктов и т. д.
Я знаю, что могу сделать это, когда PHP просто читает URL-адрес и записывает Ajax на лету, но при этом вся страница будет перезагружаться каждый раз. Есть ли способ сделать это без перезагрузки всей страницы? Мне кажется, что мне нужно иметь регулярный якорь в подменю, например, указывая на « http://mysite.com/contact-us », но при нажатии вместо того, чтобы открывать эту страницу, обрабатывайте запрос Ajax.
И если это возможно, Google увидит это как черную шляпу, верно?
С уважением Алекс
вы не можете изменить URL-адрес в адресной строке, не изменяя страницу, потому что, чтобы иметь возможность сделать это, я мог бы навестить меня по адресу http://www.imhackingyou.com/sucker, но изменить адресную строку для чтения http: // www .bankofamerica.com / Войти
Это проблема маршрутизации, а не проблема AJAX.
Если вы использовали другой инструмент ( cough ASP.NET MVC cough ), вы просто добавили бы маршрут (и я надеюсь, что есть способ сделать это на PHP), который принял URLS, например
/home /products ...
и направил их, скажем,
/index.php?area=home /index.php?area=products
Обычно это выполняется с помощью механизма перезаписи при использовании за пределами хорошей системы URL MVC или RESTful. Я использую ISAPI Rewrite для IIS, но если вы работаете над стеком LAMP, я думаю, что Apache предоставляет модуль, который предоставляет те же возможности. (Google .htaccess
)
ПРЕДУПРЕЖДЕНИЕ: RANT FOLLOWS
И, для чего это стоит,
Не пытайтесь писать все приложение в JavaScript. Сервер там по какой-то причине. Часть вашей работы в качестве веб-разработчика заключается в том, чтобы как можно больше поглощать всю работу на вашем сервере. Производительность браузера и проблемы с совместимостью заставят вас сходить с ума, когда вы попытаетесь сделать все на клиенте.
Избегать обратной передачи имеет смысл во многих обстоятельствах, но это не серебряная пуля, которую вы должны попробовать применить к каждой странице. Обычно имеет смысл загружать новую страницу при нажатии ссылки. Это то, что пользователь ожидает, он более стабилен (поскольку большая часть требуемой инфраструктуры является серверной), и это не медленнее, чем запрос AJAX для получения того же самого.
Правила:
Похоже, что это должно быть выполнено с помощью механизма перезаписи , но, предполагая, что у вас есть веская причина использовать AJAX, вы можете изменить URL-адреса с помощью javascript, изменив часть после хэша или, еще лучше, hashbang:
window.location.hash = "#!about-us";
Для получения дополнительной информации о hashbang с точки зрения SEO, посетите http://www.seomoz.org/blog/how-to-allow-google-to-crawl-ajax-content
ЗДЕСЬ РЕШЕНИЕ:
window.history.pushState(data, title, url)
Здесь Роб объясняет, как это работает, и у вас есть рабочий пример:
http://moz.com/blog/create-crawlable-link-friendly-ajax-websites-using-pushstate
Как Shopify делает это тогда? Перейдите на их веб-сайт, нажмите ссылку «Возможности», и вы увидите, что URL-адрес говорит:
http://www.shopify.com/tour/sell-online
Затем нажмите на любую из подзаголовков, и вы увидите, что адрес в URl изменяется без использования хэша, но нет флип страницы.
Я не думаю, что они используют ajax для изменения контента, потому что все это, кажется, включено в скрытые div на странице, но независимо от того, вы, вероятно, можете изменить URL-адрес, используя трюки на стороне клиента.