web-dev-qa-db-fra.com

Empêcher les robots d'explorer une partie spécifique d'une page

En tant que webmaster en charge d'un site minuscule disposant d'un forum, je reçois régulièrement des critiques à propos d'utilisateurs qui disent que le moteur de recherche interne et les recherches externes (comme avec Google) sont totalement pollués par les signatures de mes utilisateurs (ils utilisent depuis longtemps). signatures et cela fait partie de l'expérience du forum car les signatures ont beaucoup de sens dans mon forum).

Donc, fondamentalement, je vois deux options à partir de maintenant:

  1. Rendre la signature sous forme d'image et lorsqu'un utilisateur clique sur "l'image de signature", il est redirigé vers une page contenant la signature réelle (avec les liens dans la signature, etc.) et cette page est définie comme non explorable par la recherche. araignées de moteur). Cela prendrait un peu de bande passante et nécessiterait un peu de travail (parce que j’aurais besoin d’un moteur de rendu HTML pour produire l’image, etc.), mais cela résoudrait évidemment le problème (il ya de très petits pièges dans le fait que la signature ne respecterait pas le jeu de caractères/couleur de les utilisateurs, mais mes utilisateurs sont quand même très créatifs avec leurs signatures, utilisant des polices/couleurs/taille personnalisées, donc ce n’est pas vraiment un problème).

  2. Marquer chaque partie de la page Web contenant une signature comme étant non explorable.

Cependant, je ne suis pas sûr de ce que je vais dire plus tard. Pouvez-vous simplement marquer des parties spécifiques d'une page Web comme étant non explorables?

28
WebbyTheWebbor

Voici la même réponse que j'ai fournie à balise noindex pour Google sur Stack Overflow:

Vous pouvez empêcher Google de voir des parties de la page en les plaçant dans des iframes bloqués par le fichier robots.txt.

robots.txt

Disallow: /iframes/

index.html

This text is crawlable, but now you'll see 
text that search engines can't see:
<iframe src="/iframes/hidden.html" width="100%" height=300 scrolling=no>

/iframes/hidden.html

Search engines cannot see this text.

Au lieu d'utiliser des iframes, vous pouvez charger le contenu du fichier caché à l'aide d'AJAX. Voici un exemple qui utilise jquery ajax pour le faire:

his text is crawlable, but now you'll see 
text that search engines can't see:
<div id="hidden"></div>
<script>
    $.get(
        "/iframes/hidden.html",
        function(data){$('#hidden').html(data)},
    );
</script>
8

Une autre solution consiste à envelopper la signature dans un span ou un div avec un style défini sur display:none, puis à utiliser Javascript pour supprimer ce code afin que le texte s'affiche pour les navigateurs avec Javascript activé. Les moteurs de recherche savent que cela ne sera pas affiché et ne devrait donc pas l'indexer.

Ce morceau de HTML, CSS et javascript devrait le faire:

HTML:

<span class="sig">signature goes here</span>

CSS:

.sig {
display:none;
}

javascript:

<script type="text/javascript"> 
$(document).ready(function()
  {
      $(".sig").show();
  }
</script>

Vous devrez inclure une bibliothèque jquery .

7
paulmorriss

J'ai eu un problème similaire, je l'ai résolu avec css mais cela peut aussi être fait avec javascript et jquery.

1 - J'ai créé une classe que j'appellerai "disallowed-for-crawlers" et la placerai dans tout ce que je ne voulais pas que le bot Google voie voir, ou la placer dans une étendue avec cette classe.

2 - Dans le CSS principal de la page, je vais avoir quelque chose comme

.disallowed-for-crawlers {
    display:none;
}

3- Créez un fichier CSS appelé disallow.css et ajoutez-le au fichier robots.txt pour qu'il ne soit pas autorisé à être exploré. Ainsi, les robots d'exploration n'accéderont pas à ce fichier, mais l'ajouteront comme référence à votre page après le css principal.

4- Dans disallow.css j'ai placé le code:

.disallowed-for-crawlers {
    display:block !important;
}

Vous pouvez jouer avec javascript ou css. Je viens de profiter des classes d'annulation et de CSS. :) espérons que cela aide quelqu'un.

3
Rolando Retana

Une façon de faire est d'utiliser un image de texte plutôt qu'un texte brut.

Il est possible que Google finisse par être suffisamment intelligent pour lire le texte hors de l'image. Le texte ne sera donc pas totalement à l'abri du futur, mais cela devrait bien fonctionner pendant au moins un moment à partir de maintenant.

Cette approche présente de nombreux inconvénients. Si une personne a une déficience visuelle, c'est mauvais. Si vous souhaitez que votre contenu s'adapte aux appareils mobiles par rapport aux ordinateurs de bureau, c'est mauvais. (etc)

Mais c'est une méthode qui fonctionne (quelque peu) actuellement.

2
James Foster

C'est facile.

Avant de servir votre page, vous devez savoir s’il s’agit d’un bot, d’un ordinateur ou d’un téléphone. Vous devez ensuite définir le contenu en conséquence. Ceci est une pratique courante à l’époque actuelle et la fonctionnalité de base de certains CMS.

Il existe de nombreuses solutions sur SE pour effectuer une redirection basée sur USER AGENT qui peut être insérée dans votre htaccess. Si cela convient à votre logiciel de forum, vous pouvez exécuter un code différent à partir de la même base de données pour répondre aux besoins de Google sans les paillettes et les accessoires.

Alternativement, vous pouvez insérer une petite ligne dans votre code PHP qui fait "si AGENT UTILISATEUR == Googlebot, alors n'indiquez pas de signatures".

Si vous ne pouvez vraiment pas le faire, vous pouvez obtenir que mod_proxy serve le bot et l'utilise pour supprimer tout ce que votre code php génère que le bot n'a pas besoin de voir.

Techniquement, Google n'approuve pas que leur moteur de recherche affiche une page différente de celle du visiteur normal du site. Cependant, à ce jour, ils n'ont pas supprimé la BBC et les autres fournisseurs de contenu spécifique au navigateur/à l'adresse IP/au visiteur de ses résultats. . Ils ont aussi des moyens limités de voir si leur bot a été "trompé".

La solution alternative consistant à masquer le contenu avec CSS pour qu'il soit réactivé par un script est également un peu une zone grise. Selon leurs propres directives relatives aux outils pour les webmasters du 20/6/11, ce n’est pas une bonne idée:

http://www.google.com/support/webmasters/bin/answer.py?answer=6635

Ce n'est peut-être pas une tablette coulée dans le marbre, mais elle est à jour et par Google.

L'astuce de masquer le contenu ne fonctionnera pas avec la minorité de personnes n'ayant pas le javascript. Cela peut ne pas être une préoccupation majeure, cependant, attendre que le document soit chargé et afficher les signatures ne sera pas une expérience de visionnement satisfaisante, comme vous le ferez pense que la page a été chargée, elle se déplacera alors que les signatures cachées apparaissent jusqu'à ce que le contenu soit placé au bas de la page. Ce type de chargement de page peut être irritant si vous avez un réseau haut de gamme bas de gamme, mais peut ne pas être visible si vous avez une machine de développement rapide sur une connexion Internet rapide.

1
ʍǝɥʇɐɯ

Non, il n'y a aucun moyen d'empêcher les robots d'explorer des parties de pages. C'est une page entière ou rien.

Les extraits dans les résultats de recherche de Google sont généralement extraits de méta description sur la page. Vous pouvez donc faire en sorte que Google affiche une partie spécifique de la page en la mettant dans la balise meta description. Avec le contenu généré par l'utilisateur, il est difficile d'obtenir de bons extraits, mais prendre le premier post du fil de discussion fonctionnerait probablement.

Le seul autre moyen auquel je puisse penser est d'utiliser Javascript. Quelque chose comme paulmorriss a suggéré peut fonctionner, mais je pense que les moteurs de recherche indexeraient quand même le contenu s'il est en HTML. Vous pouvez le supprimer du code HTML, le stocker dans une chaîne Javascript, puis le rajouter au chargement de la page. Cela devient un peu complexe, cependant.

Enfin, gardez à l’esprit que si Google affiche les signatures des utilisateurs dans leurs extraits, il a décidé que c’était la partie la plus pertinente pour la requête de l’utilisateur.

0
DisgruntledGoat

Vous pouvez mettre la page dans un PHP si avec un "else" qui mène à un captcha qui donne la clé pour la partie if.

Cela ne me dérange pas vraiment, car si les informations d'identification de l'utilisateur ne correspondent pas sur ma page, elles obtiennent une page vierge ou sont envoyées à la page de connexion.

<?php
session_start();

if(empty($_SESSION['captcha']) or $_SESSION['captcha'] != $key){
    header("Location: captcha.php");
}

if(!empty($_SESSION['captcha']) and $_SESSION['captcha'] == $key){

"the page"

}
?>

$key devrait être un hachage du jour actuel ou quelque chose qui change, il n'est donc pas suffisant d'ajouter la valeur à la session.

Ecrivez dans le commentaire si vous voulez que je rajoute un exemple de captcha car je n'en ai pas sur moi maintenant.

0
Alfons Marklén