Další parametry do routeru, pro (ajax) kanonizaci a meta robots?
- ic
- Člen | 431
Zdravíčko, řešil jsem proč mi Google bot chodí na zvláštní url
adresy, jako jsou třeba ty pro ajax, tedy načítané javascriptem pomocí
nativní fetch()
funkce… zjistil jsem, že to Google prostě
dělá. Tím jak vykonává javascript, tak i indexuje javascript.
Google všechen obsach co přijde jako část stránky fetch
em
indexuje, zvlášť tedy pokud tam najde text, něco body s prostým
response: ok
indexovat jistě nebude, ale i tak na tu url dojde,
aby zjistil, že to asi není to co hledal.
A co je zajímavé, po každém fetchi se google dívá i na aktuální
rel=canonical (pokud je v html hlavičce) a když ji najde tak tu kanonickou
url bere jako kanonickou pro ten fetch… tedy čte něco jako
web.tld/api/poll-123
a v head najde rel=canonical třeba
web.tld/clanky/jmeno-clanku
a tak to propojí.
Znělo mě to až neuvěřitelně, ale prostě nová doba, ostatně přesvěčte se v dokumentaci Google Javascript SEO basics https://developers.google.com/…t-seo-basics
A google tam doporučuje tedy po každém fetchi také nastavovat meta=robots obsah aby robot věděl jak s daným obsahem co byl právě fetchován zacházet. To samé s rel=canonical.
Já přemýšlím, kam to v Nette sázet, tedy kde chci mít fyzicky zapsané tyhle hodnoty. Jasně, nabízí se šablona a příslušná část head elementu. Jenže já většinou nefetchuji celou stránku s vlastním head elementem. Spíše jako nějaký fragment kódu nebo json obsah. Takže kam s tím?
Napadl mě router, kde se první kanonizace provádí viz. https://doc.nette.org/…tion/routing#…
když si vezmu příklad z dokumentace, tak bych ho obohatil o novinky
Route::MetaRobots
a Route::RelCanonical
,
něco jako:
use Nette\Routing\Route;
$router->addRoute('<presenter>/<action>', [
'presenter' => [
Route::Value => 'Home',
Route::FilterTable => [
// string in URL => presenter
'produkt' => 'Product',
'einkaufswagen' => 'Cart',
'katalog' => 'Catalog',
],
// schodné pro všechny možné actiony
Route::MetaRobots => 'noindex',
Route::RelCanonical => 'article:default' // třeba, nebo plnou url
],
'action' => [
Route::Value => 'default',
Route::FilterTable => [
'liste' => 'list',
],
// případně sem s tím pokud chci mít rozdílné pro různé action
],
]);
Ale možná to není vhodné místo, co myslíte, fungovalo ty to zde, nebo to raději strkat někam do presenterů k Nette\Application\Responses\JsonResponse třeba?
Editoval ic (28. 9. 19:38)
- Marek Bartoš
- Nette Blogger | 1313
Já si meta tagy nastavuju přímo v presenteru před renderem, při ajaxovém přechody mezi akcemi/presentery se html head překreslí.
O vygenerování kanonické url se používá odkaz na //this, do kterého přidávám persistentní parametry. Přes toto
Zakázání indexace a procházení odkazů s ?do= apod. se řeší přes robots.txt (funguje stejně jako meta robots, navíc takovou stránku robot nenavštíví vůbec)
User-agent: *
Disallow: /*?*fid=
Disallow: /*?*do=
Myslím, že nic víc potřeba není a funguje to takto plně automaticky, bez zásahu do konkrétních rout. Samozřejmě to spoléhá na to, že pro redraw stránky využíváš snippety z Nette a neřešíš si to po vlastní ose
- Gappa
- Nette Blogger | 212
Marek Bartoš napsal(a):
Zakázání indexace a procházení odkazů s ?do= apod. se řeší přes robots.txt (funguje stejně jako meta robots, navíc takovou stránku robot nenavštíví vůbec)User-agent: * Disallow: /*?*fid= Disallow: /*?*do=
Menší odbočka – nemělo by to být spíš takto? :)
User-agent: *
Disallow: /*?fid=
Disallow: /*&fid=
Disallow: /*?do=
Disallow: /*&do=
Jinak to matchne i validní URL jako např.:
https://example.com/?undo=1
https://example.com/?rfid=123456789
Editoval Gappa (29. 9. 13:11)
- Marek Bartoš
- Nette Blogger | 1313
Naštěstí žádnou takovou url adresu nemáme. Máš pravdu, mám to špatně