Egy ideje azon töröm a fejem, miként lehetne keresőbaráttá tenni a facebook comments box-ot, mivel iframe-et nem indexel a Google, vagy a másik eset, hogy a tartalmat a facebook-nak tulajdonítja. Egyik eset sem seo barát. Hogy miért ragaszkodom mégis a facebook-hoz? Mert nagyon jó lehetőség social media marketing-re, mivel a hozzászólások megjelennek a fejhasználók falán.
A facebook developers oldalon a comments plugin-nál rövid kitérőt tesz erre a témára, és ebben a bejegyzésben kissé részletesebben tárgyalja a témát, de nem eléggé.
Ha a sima PHP kódot illesztem az oldal forráskódjába, akkor eléggé olvashatatlan formában jeleníti meg emberi lényeknek a hozzászólásokat. Kerestem egy bővített script-et, ami hasonlóan jeleníti meg, mint a comments plugin, de html-t generál.
Felmerül 2 probléma:
- Ha a Google indexeli a facebook comments plugin hozzászólásokat, akkor ezzel a script-tel duplikált tartalmat hozok létre.
- Ha mégsem indexeli, csak a sima html-t, akkor is valamit kell kezdeni vele, hogy a látogatóknak ne jelenjen meg kétszer. Erre az egyik lehetőség az lenne, hogy a plugin alá rejtem a html-t, ezt viszont súlyosan büntetheti a Google ha rajtakap, és esetleg nem veszi jó szándéknak.
Az én elképzelésem a következő: a php kód által generált html-t tegyem <noscript> tag-be, így vagy az iframe/javascript kombót, vagy a sima html-t látják a keresők, attól függően, hogy támogatják-e vagy sem a js-t.
Működés közben megtekinthető a blogomon bármely bejegyzésnél. Kíváncsi vagyok, mikor kezdi a Google újraindexelni vagy kivágni az oldalam
PHP kód:
<div id="comments">
<fb:comments href="http://KOMMENTÁLANDÓ OLDAL URL-je" width="szélesség pixelben" migrated="1" num_posts="megjelenített hozzászólások száma"></fb:comments> <!-- STANDARD COMMENT BOX -->
<!-- INNEN KEZDŐDIK AZ EMLÍTETT KÓD -->
<noscript>
<?php
// displays some comments for a certain url
$url = "KOMMENTÁLANDÓ OLDAL URL-je"
// fql multiquery to fetch all the data we need to display in one go
$queries = array('q1' => 'select post_fbid, fromid, object_id, text, time from comment where object_id in (select comments_fbid from link_stat where url ="'.$url.'")',
'q2' => 'select post_fbid, fromid, object_id, text, time from comment where object_id in (select post_fbid from #q1)',
'q3' => 'select name, id, url, pic_square from profile where id in (select fromid from #q1) or id in (select fromid from #q2)',
);
// note format json-strings is necessary because 32-bit php sucks at decoding 64-bit ints :(
$result = json_decode(file_get_contents('http://api.facebook.com/restserver.php?format=json-strings&method=fql.multiquery&queries='.urlencode(json_encode($queries))));
$comments = $result[0]->fql_result_set;
$replies = $result[1]->fql_result_set;
$profiles = $result[2]->fql_result_set;
$profiles_by_id = array();
foreach ($profiles as $profile) {
$profiles_by_id[$profile->id] = $profile;
}
$replies_by_target = array();
foreach ($replies as $reply) {
$replies_by_target[$reply->object_id][] = $reply;
}
/**
* print a comment and author, given a comment passed in an an array of all profiles.
* @param object $comment as returned by q1 or q2 of the above fql queries
* @param array $profiles_by_id, a list of profiles returned by q3, keyed by profile id
* @returns string markup
*/
function pr_comment($comment, $profiles_by_id) {
$profile = $profiles_by_id[$comment->fromid];
$author_markup = '';
if ($profile) {
$author_markup =
'<span class="profile">'.
'<img src="'.$profile->pic_square.'" align="left" />'.
'<a href="'.$profile->url.'" target="_blank">'.$profile->name.'</a>'.
'</span>'; //SPAN CLASS-T TETSZŐLEGESEN VÁLTOZTATHATJUK, CSS-BEN DEFINIÁLHATJUK A STÍLUSÁT, PADDING 5-10 px AJÁNLOTT AZ img-NEK
}
return
$author_markup.
' ('.date('r', $comment->time).')'.
': '.
$comment->text;
}
//print '<html><body>';
// print each comment
foreach ($comments as $comment) {
print
'<div style="overflow:hidden; margin: 5px;">'.
pr_comment($comment, $profiles_by_id).
'</div>';
// print each reply
if (!empty($replies_by_target[$comment->post_fbid])) {
foreach ($replies_by_target[$comment->post_fbid] as $reply) {
print
'<div style="overflow:hidden; margin: 5px 5px 5px 50px">'.
pr_comment($reply, $profiles_by_id).
'</div>';
}
}
}
?>
</noscript>
<! -- ITT ÉR VÉGET AZ EMLÍTETT KÓD -->
</div>
Kíváncsi vagyok a véleményetekre, hogy mennyire keresőbarát ez a megoldás. Remélem sokatokat megmentek a további fejfájásoktól, és bátrabban áttértek a facebook hozzászólás rendszerére. <!-- azért nem a webfejlesztés topic-ba írtam, mert szerintem ez a megoldás inkább seo szempontból lehet hasznos -->
Könyvjelzők