WRInaute accro
Nous savons tous qu'il faut éviter de concevoir un site en frame si on veut un tant soit peu le référencer. Mais quid des sites déjà développés et pour lesquels le client ne souhaite pas un redéveloppement ?
Le plus dur dans un site en frame reste de référencer toutes les pages tout en offrant un confort de navigation optimal à l'utilisateur. En effet, on voit souvent des sites en frame référencés mais une fois cliqué sur un lien vers ce site depusi les pages de résultats de Google, on se retrouve dans une page amputés de certains éléments, voire pire sans éléments de navigation.
J'ai donc mis au point une technique, utilisant le javascript de manière à ne pas être éxecutée lors du apssage des bots, qui a pour but de replacer la page dans le frameset si elle est appellée directement.
La méthode se décompose en différents éléments :
1) un fichier javascript qui va servir à créer/lire des cookies qu'on crée lors de l'appel d'un page hors contexte, et une fonction quivalancer tout le processus :
On appelle donc la fonction gest_frame en en-tête des pages de contenus, en lui passant en paramètre le nom de cette même page :
Sur la page du frameset, on a ce bout de code en en-tête de page :
Tout cela fonctionne de la manière suivante : quand l'utilisateur arrive sur une page de l'intérieur du frameset, le script détecte que cette page est appellée hors-contexte, crée donc une variable contenant le nom de la page et redirige l'utilisateur vers la page telle qu'elle devrait apparaître dans le frameset.
La limitation de cette méthode est celle du javascript : si l'utilisateur surfe sans javascript, il ne verra aucun différence et la page s'affichera hors-frameset.
Pour l'instant, la méthode semble bien fonctionner sur les sites où je l'ai appliquée. L'enesemble des pages du site a pu être indéxé, et quand je clique sur les pages de mon site depuis les résultats de recherche, la page s'affiche avec le frameset complet.
J'aimerais avoir votre avis sur cette méthode : risques, améliorations possibles, etc.
Le plus dur dans un site en frame reste de référencer toutes les pages tout en offrant un confort de navigation optimal à l'utilisateur. En effet, on voit souvent des sites en frame référencés mais une fois cliqué sur un lien vers ce site depusi les pages de résultats de Google, on se retrouve dans une page amputés de certains éléments, voire pire sans éléments de navigation.
J'ai donc mis au point une technique, utilisant le javascript de manière à ne pas être éxecutée lors du apssage des bots, qui a pour but de replacer la page dans le frameset si elle est appellée directement.
La méthode se décompose en différents éléments :
1) un fichier javascript qui va servir à créer/lire des cookies qu'on crée lors de l'appel d'un page hors contexte, et une fonction quivalancer tout le processus :
Code:
// JavaScript Document
function detect_orphan_page(current_page)
{
if (parent.location != "http://www.example.com/url_de_la_page_de_frameset.asp")
{
var pathname=location.pathname;
//var myDomain=pathname.substring(0,pathname.lastIndexOf('/')) +'/';
var date_exp = new Date();
date_exp.setTime(date_exp.getTime()+(365*24*3600*1000));
SetCookie("curpage",current_page,date_exp,"/");
parent.location = "http://www.example.com/url_de_la_page_de_frameset.asp";
}
}
function SetCookie (name, value) {
var argv=SetCookie.arguments;
var argc=SetCookie.arguments.length;
var path=(argc > 2) ? argv[3] : null;
var domain=(argc > 3) ? argv[4] : null;
var secure=(argc > 4) ? argv[5] : false;
document.cookie=name+"="+escape(value)+
((path==null) ? "" : ("; path="+path))+
((domain==null) ? "" : ("; domain="+domain))+
((secure==true) ? "; secure" : "");
}
function getCookieVal(offset) {
var endstr=document.cookie.indexOf (";", offset);
if (endstr==-1)
endstr=document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function GetCookie(name) {
var arg=name+"=";
var alen=arg.length;
var clen=document.cookie.length;
var i=0;
while (i<clen) {
var j=i+alen;
if (document.cookie.substring(i, j)==arg)
return getCookieVal (j);
i=document.cookie.indexOf(" ",i)+1;
if (i==0) break;}
return null;
}
On appelle donc la fonction gest_frame en en-tête des pages de contenus, en lui passant en paramètre le nom de cette même page :
Code:
<script language="javascript">
detect_orphan_page('page.asp');
</script>
Sur la page du frameset, on a ce bout de code en en-tête de page :
Code:
<?
// gestion du réajustement des frame si le cookie page a été créé et si le // visiteur n'est pas un bot
if ((isset($_COOKIES['curpage'])) && ($_COOKIES['curpage']!=""))
{
$page = $_COOKIES['curpage']
}
else
{
page = "page_par_defaut.html"
}
?>
Tout cela fonctionne de la manière suivante : quand l'utilisateur arrive sur une page de l'intérieur du frameset, le script détecte que cette page est appellée hors-contexte, crée donc une variable contenant le nom de la page et redirige l'utilisateur vers la page telle qu'elle devrait apparaître dans le frameset.
La limitation de cette méthode est celle du javascript : si l'utilisateur surfe sans javascript, il ne verra aucun différence et la page s'affichera hors-frameset.
Pour l'instant, la méthode semble bien fonctionner sur les sites où je l'ai appliquée. L'enesemble des pages du site a pu être indéxé, et quand je clique sur les pages de mon site depuis les résultats de recherche, la page s'affiche avec le frameset complet.
J'aimerais avoir votre avis sur cette méthode : risques, améliorations possibles, etc.