Další parametry do routeru, pro (ajax) kanonizaci a meta robots?

ic
Člen | 431
+
+1
-

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 fetchem 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
+
+2
-

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
+
+4
-

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
+
+2
-

Naštěstí žádnou takovou url adresu nemáme. Máš pravdu, mám to špatně