Référencement d'un site en frame

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 :
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.
 
WRInaute passionné
Que se passe-t-il quand l'internaute qui est arrivé sur une page sans frameset depuis un moteur fait page précédente avec son browser ?

C'est ça qui m'a fait abandonné les frames quand j'ai constaté dans mes stats que page précédente à cause du script renvoyait toujours sur la même page et que certains internautes cliquaient rageusement 10 à 20 fois sur le bouton page précédente avant de comprendre qu'il retomberaient toujours sur la même page.
 
WRInaute accro
...

... certes à un moment l'utilisateur se retrouve bloqué sur sa page d'entrée sur le site (et encore a priori ca ne le fait pas sur Firefox). Peut être un petit problème à résoudre. Personnelement je ne fais pas de sites en frame, et ma société a banni ce modus operandi depuis longtemps, mais quand on se retrouve avec un site comme ça à référencer, il faut bien trouver des solutions.
 
WRInaute discret
Et la solution qui consiste a mettre un lien sur chaque page de contenu? C'est ce que je fai sur mon site, et ca a l'air de satisfaire les gens.
 
Nouveau WRInaute
Ca à l'air de fonctionner niveau utilisateur, je vais tester la réaction de google. Par contre j'ai changé quelques trucs :

Le fichier .js que j'ai appelé gestion_frames.js :

Code:
// JavaScript Document 
function detect_orphan_page(current_page) 
{ 
 if (parent.frames.length < 1) 
   { 
      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 = './index.php';
   } 
} 

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; 
}

J'ai modifié le if et la redirection pour que le script d'adapte à tous les sites sans avoir à modifier le code à chaque fois. (à partir d'un autre script car je suis une quiche en javascript)

l'appel du script :

Code:
<script src="gestion_frames.js" type="text/javascript" language="javascript"></script>

<script language="javascript">
	detect_orphan_page('realisations.htm'); 
</script>

C'est tout con mais j'ai du chercher sur google comment appeler une fonction dans un fichier externe (une quiche te dis-je ;))

et enfin le bout de code php:

Code:
<?php
 
// gestion du réajustement des frame si le cookie page a été créé et si le // visiteur n'est pas un bot 
if ((isset($_COOKIE['curpage'])) && ($_COOKIE['curpage']!="")) 
{ 
   $page = $_COOKIE['curpage'] ;
} 
else 
{ 
   $page = "accueil.htm";
} 

?>

Je suppose que ton script est à l'origine en asp (je connais pas du tout asp), comme je bosse en php j'ai du enlever les S à la variable globale $_COOKIE et ajouter les points virgules

Voilà, y'a plus qu'à optimiser mes pages et attendre que monsieur google passe par là
 
Nouveau WRInaute
Bonjour,
j'ai un problème au sujet de ce script ou peut-être pas...

J'ai installé correctement le code sur le site suivant http://www.coda-asso.fr/index.php (le frameset)
puis sur la page d'accueil http://www.coda-asso.fr/html/accueil.html
et sur une troisième page http://www.coda-asso.fr/html/activites.html

la manœuvre est que si l'on clique sur un lien tendant sur la frame activites.html,
le site charge automatiquement le frameset index.php et la frame activites.html incrustée correctement dans le frameset.

alors le résultat est que j'ai bien le frameset mais avec la frame accueil.html inscrustée (notez que accueil.html est la frame par défaut)

Peut être que ce script ne fonctionne pas correctement avec les iframes.

En tout cas je salue ce script émergeant d'esprits fûtés !
 
Discussions similaires
Haut