Искам да се извиня на Biossy за тона ми в първото ми съобщение към него. Ако не беше писал, нямаше да направя този research и да разбера как всъщност стоят нещата. Трябва да има повече дискусии, и е хубаво когато са подкрепени с аргументи
@AMitrev Да, служебен е, просто в моят framework беше по подразбиране и реших да продължа с него, без да обръщам внимание дали това всъщност ще е проблем. Вероятно са го използвали заради събитието window.on('hashChange'), при pushState просто използват друго събитие и всичко работи.
Ами при SPA е малко по-различно. Преди <body> и след </body> е еднакво съдържанието на всички страници. А когато заредя някой модул имам контрол само в неговият контекст. Разбира се мога да достъп с js мета таговете, но FB не обръща внимание на това. Явно не изпълнява javascript и не вижда промените.
А съдържанието на страницата го виждам чак след като се зареди модула и изпрати заявка към сървъра.
Т.е. това, което "вижда" FB crawler-a е г/д това
HTML:
<html>
<head><!-- some meta tags here -->
<body>
<div id="content"><!-- insert module's html when the module is loaded --!></div>
</body>
</html>
Т.е. една страница с 10 реда html, която има попълнени мета тагове по подразбиране.
Варианта, който се сещам сега, е да направя от backend-a когато страницата е отворена от FB Crawler-a и е блог статия, то тогава да я заредя и да попълня мета данните с тази информация. Така ще си спестя да правя html snapshot, но ще правя две заявки за едно и също нещо.
Ще опитам този вариант и ще споделя резултат. Но не се ангажирам със срок ... имам доста булшит на главата в момента.