Link pushstate i SEO HTML5
Próbuję zaimplementować historię pushstate na mojej stronie, aby załadować zawartość ze strony single.php wewnątrz kontenera index.php.
Moja strona ma dwie strony główne: index.php i single.php.
W index.php znajdują się linki, które wywołują skrypt pushstate:
<a class="phplink" href="/Formlabs-3D-printer" title="Formlabs 3D printer">Post 12</a>
<a class="phplink" href="/Minimal-Bumper-for-iPhone-5" title="Minimal Bumper for iPhone 5">Post 11</a>
Na mojej stronie single.php używam isset get method, aby dynamicznie ładować zawartość odpowiadającą klikniętemu linkowi na index.php:
<?php
if (isset($_GET["page"])) {
//I do some stuff in order to echo content
?>
W moim pliku .htaccess przepisuję link URL (powodem, dla którego link index.php jest wyczyszczony):
Options +FollowSymLinks
RewriteEngine on
RewriteRule /([a-zA-Z0-9\-]+)$ /index.php
RewriteRule /([a-zA-Z0-9\-]+)$ /single.php?page=$1 [L]
A tutaj mój skrypt pushstate:
$.ajaxSetup({cache:false});
$(".phplink").click(function(){
var $post_link = $(this);
load_content($post_link.attr('title'),$post_link.attr('href'));
return false;
});
window.onpopstate = function(event) {
if (event.state) {
load_content(event.state.title, window.location.pathname, true);
} else {
var stateObj = {
title: document.title,
url: window.location.pathname,
};
url = window.location.pathname;
load_content(url,url);
}
}
function load_content(title,url,skipHistory) {
$.get(url,function (data) {
document.title = title;
var stateObj = {
title: title,
url: url
};
if (!skipHistory) {
if (typeof window.history.pushState == 'function') {
window.history.pushState(stateObj,title,url);
}
}
if(url.substring(1) != '') {
$("#ajaxify_container").html("loading...");
$("#ajaxify_container").load('single.php?page='+url.substring(1)+' #container-2');
}
else {
$("#ajaxify_container").html('');
}
});
}
Mój skrypt pushstate działa, aby załadować zawartość na kliknięcie linku (on.phplink
Kliknij). Działa również dla przycisku wstecz / do przodu.
1st PROBLEM: Kiedy odświeżam przeglądarkę (za pomocą linku pushstate w adresie URL) działa ona na chrome Google (ładuj zawartość z single.php do kontenera index.php), ale nie w IE10 (nic nie jest ładowane, pozostaje na index.php strona).
2. PROBLEM: Jeśli wyłączę javascript, aby zobaczyć, co się dzieje z googlebot (dla SEO). Nie mogę załadować / dotrzeć do strony single.php, zawsze pozostaje ona na index.php. Strona single.php nie może być indeksowana przez wyszukiwarkę (przypuszczam, ale nie jestem tego pewien). To zachowanie jest normalne, ponieważ ustawiłem w moim pliku .htaccess, że „wszystkie te linki” zostaną przekierowane do index.php.
Robię tę sztuczkę, ponieważ bez niej pushstate ładuje stronę single.php po odświeżeniu. I nie chcę tego zachowania. Chcę po odświeżeniu po prostu załadować zawartość z single.php do kontenera index.php.
Więc moim głównym problemem (problemem 2) jest: Nie wiem, jak napisać skrypt lub moje linki na mojej stronie php, aby załadować zawartość w moim pliku index.php po kliknięciu, odświeżam i wracam / przeskakuję dalej.
W normalnym zachowaniu pushstate, czy przy odświeżaniu przeglądarki, onpopstate może ładować zawartość ze strony do kontenera innej strony (ładować zawartość z single.php do kontenera index.php)?
Mam nadzieję, że ktoś może mi pomóc i wyjaśnić, jak to działa. Mam pewne trudności ze zrozumieniem, jak to działa z linkami.
Przepraszam za mój angielski, jestem Francuzem ...