¿Cómo oculto los nodos a los que no se debe acceder directamente desde los usuarios y los motores de búsqueda?

51

Descubrí que hay veces que tengo un nodo que simplemente contiene contenido que se mostrará en otro lugar, pero que no debería verse directamente. Es decir, nadie debería ir al nodo / 1234, pero el contenido del nodo 1234 debería mostrarse en otro lugar. Por ejemplo, creo una página acerca de contenido con pestañas usando vistas. Así que hay páginas "Acerca de mí", "Acerca de nosotros" y "Acerca de ellos". Todos estos se muestran en una sola página con pestañas usando Vistas. Por lo tanto, no quiero que las personas accedan directamente al nodo "Acerca de nosotros" porque no verían las pestañas de las otras páginas. Al mismo tiempo, no quiero que Google proporcione a las personas un enlace directo a este nodo, quiero limitar el acceso para que los usuarios solo puedan acceder a él a través de la Vista (es decir, la pestaña).

Por lo tanto, necesito restringir el acceso al nodo, eliminarlo de los resultados de búsqueda de Drupal y asegurarme de que Google no lo detecte. ¿Alguna sugerencia?

Chaulky
fuente
Actualmente estoy usando drupal 6, pero si es diferente entre 6 y 7, creo que sería útil responder a ambos
Chaulky el
Si le preocupan solo unos pocos nodos, ¿por qué no agregarlos al archivo robots.txt para excluirlos de las búsquedas de Google?
Tangurena
Este es un error común. robots.txt no impide que los motores de búsqueda indexen su sitio, evita que los motores de búsqueda rastreen su sitio. Si alguien enlaza a una página en su sitio, Google seguirá el enlace e indexará la página si así lo desea. Si desea evitar la indexación , debe usar la metaetiqueta ROBOTS, es decir: <meta name = "ROBOTS" value = "NOINDEX" />
René

Respuestas:

28

Esto me parece un buen caso de uso para el módulo Paneles porque puede crear paneles que anularán las páginas de nodo, y puede establecer el contexto para el panel de una manera que garantice a los usuarios ver la página que desea que vean, así como acceda a las reglas de las páginas del panel si las necesita. Para más detalles, vea esta publicación sobre do

coderintherye
fuente
¡Esto parece hacer exactamente lo que quiero, y de una manera limpia y simple ... incluso viene con un tutorial (buen enlace)!
Chaulky
¿No es esto una exageración en comparación con la solución del módulo Rabbit Hole? ¿Hay beneficios adicionales para esto que la convierten en la respuesta elegida?
Mario Awad
1
@MarioAwad Bueno, para uno, el módulo Rabbit Hole ni siquiera existió hasta más de un año después de que respondí esta pregunta. En ese momento, los paneles eran la mejor solución, todavía creo que es la mejor solución si alguien ya tiene paneles instalados, de lo contrario, Rabbit Hole podría ser una mejor solución liviana.
coderintherye
@nowarninglabel Suena como un buen consejo. Gracias. Tal vez debería agregar esta aclaración a la respuesta para que sea mejor para los futuros asistentes. Salud.
Mario Awad
33

El módulo Rabbit Hole proporciona esta característica.

Rabbit Hole es un módulo que agrega la capacidad de controlar lo que debería suceder cuando una entidad se está viendo en su propia página.

Quizás tenga un tipo de contenido que nunca debería mostrarse en su propia página, como un tipo de contenido de imagen que se muestra en un carrusel. Rabbit Hole puede evitar que este nodo sea accesible en su propia página, a través de node / xxx.

Pierre Buyle
fuente
Ahora hay una versión de Drupal 6.
mpdonadio
Excelente, una solución limpia y simple.
jamix
1
¡Agradable, este es mejor que el módulo del panel (para este caso de uso) si solo desea evitar el acceso directo a un nodo content_type, ya que solo hace eso!
Larzan
13

Una opción puede ser nunca publicar el nodo pero hacer que la página del consumidor ignore su estado de publicación. Por lo tanto, en su ejemplo, su vista "Acerca de" puede ignorar el estado de publicación de sus nodos "Acerca de xxx". Como los nodos no se publican, los usuarios no autorizados no pueden acceder a ellos y el motor de búsqueda no debe indexarlos.

Otra solución es usar una hook_nodeapi('view')/ hook_node_view()implementación para emitir una drupal_goto()o drupal_access_denied()cuando la página del nodo es visitada por un usuario no autorizado. Tenga en cuenta que hook_nodeapi()/ hook_node_view()se utilizan en muchos casos y no solo al ver una página de nodo.

hook_menu_alter()también se puede usar para alterar la devolución de llamada de acceso de las páginas de nodos para negar el acceso a los nodos ocultos .

Probablemente lo mejor sea no basar el filtrado en una ID de nodo codificada, sino usar un campo personalizado en el nodo (usando CCK / Field API o una tabla personalizada) o una lista de nodos ocultos almacenados en una variable .

Pierre Buyle
fuente
@ mongolity404 buena publicación, buena información. Me dio ideas para algunas otras cosas. Pero, ¿por qué wiki comunitario?
Chaulky
Hice mi comunidad wiki de respuesta en caso de que alguien que siente el ejemplo de código como el abastecimiento de las opciones que sugerí ...
Pierre Buyle
7

Para Drupal 7, el Rabbit Hole ofrece esta función.

Rabbit Hole es un módulo que agrega la capacidad de controlar lo que debería suceder cuando una entidad se está viendo en su propia página.

Esto funciona al proporcionar múltiples opciones para controlar lo que debería suceder cuando la entidad se está viendo en su propia página. Tienes la habilidad de

  1. Entregar una página de acceso denegado.

  2. Entregar una página no encontrada.

  3. Emita una página redirigida a cualquier ruta o URL externa.

  4. O simplemente muestre la entidad (comportamiento regular).

Cómo :

Habilite el submódulo de nodos Rabbit Hole Luego obtendremos la sección de configuración asociada con cada formulario en Drupal CODE

niksmac
fuente
6

Resuelto Primero probé la respuesta de Pierre Buyle, pero si anula la publicación de un nodo, no se puede acceder correctamente y esos nodos se vuelven inútiles. En mi caso, tengo nodos primarios y secundarios, solo los nodos secundarios (para fines administrativos) son los que deben ocultarse y NO ser indexados por los rastreadores. Lo que hice con el administrador de páginas hizo una redirección de URL (ocultando estos nodos a todos los usuarios excepto al administrador) con una respuesta http de acuerdo con este tutorial de http://www.wunderkraut.com/ 1 y los nodos no indexados de los rastreadores se manejan por el módulo Node no-index . Esto funcionará incluso si no tiene una relación de nodo padre-hijo. Enlace al tutorial:

pinueve
fuente
4

En Drupal 7, también debería ser posible usar hook_node_access () , este es un enlace normal en D7 que puede ser implementado por todos los módulos para todos los tipos de nodos. Entonces puede denegar el acceso si el usuario está intentando ver el nodo en su propio nodo / nid.

Probablemente también necesite implementar hook_query_node_access_alter () y agregar una marca allí para ocultar el nodo en los resultados de búsqueda. Esto incluso podría ser suficiente por sí solo y no necesita hook_node_access (). E incluso podría funcionar en D6 porque también puede modificar la consulta allí, pero es mucho más fácil en D7 debido al generador de consultas.

Berdir
fuente
3

Simplemente configure esos nodos como 'no publicados', luego, en la vista, agregue el filtro 'nodo publicado: no'.

Como seo note, es una buena práctica crear un tipo de contenido personalizado para esos nodos 'fantasmas', y decirle a Pathauto que les dé URL específicas (yo uso /dev/null/[title-raw];): incluso si el nodo no está publicado, tendrá su propio alias de URL, así que en su ejemplo, si crea primero el nodo fantasma 'sobre nosotros', y luego la página de vista 'sobre nosotros', la url del segundo será example.com/about-us-0becose example.com/about-usse ha tomado del fantasma (sin embargo, puede establecer las rutas manualmente)

Strae
fuente
3

Puede usar cualquier tipo de sistema de acceso a nodos y usar vistas3. Allí no puede deshabilitar la reescritura de sql en la configuración de la consulta, por lo que puede deshabilitar el sistema de acceso a nodos en esta vista.

Daniel Wehner
fuente
3

Puede hacerlo utilizando los módulos de reglas.
+ Crear nueva regla con el evento "Se ve contenido".
+ Agregue un par de condiciones, por ejemplo: el usuario tiene roles: anónimo, la ruta tiene un alias de URL: nodo / xyz (este es el nodo que desea limitar para el usuario anónimo). Recuerde agregar la condición "y" o "o" si es necesario.
+ Crear acción para redirigir a otra página o hacer otra cosa. Este es el código de muestra que exporté para ti

{ "rules_limit_viewing_some_nodes" : {
  "LABEL" : "Limit viewing some nodes",
  "PLUGIN" : "reaction rule",
  "REQUIRES" : [ "rules", "path" ],
  "ON" : [ "node_view" ],
  "IF" : [
     { "user_has_role" : {
       "account" : [ "site:current-user" ],
       "roles" : { "value" : { "1" : "1" } }
      }
     },
     { "AND" : [] },
     { "path_has_alias" : { "source" : "node\/28" } }
   ],
   "DO" : [ { "redirect" : { "url" : "error" } } ]
 }
}
Stone Vo
fuente
2

Creo que la forma más fácil de lograr lo que quiere es usar el Administrador de páginas (Ctools), es realmente simple de usar, todo lo que tiene que hacer es especificar qué nodo redirigir a dónde (en este caso, de un nodo a otro)

Nicolas_ii
fuente
2

El módulo de acceso al contenido satisfará perfectamente sus requisitos.

Este módulo le permite administrar permisos para tipos de contenido por rol y autor. Le permite especificar vistas personalizadas, editar y eliminar permisos para cada tipo de contenido. Opcionalmente, puede habilitar la configuración de acceso al contenido, por lo que puede personalizar el acceso para cada nodo de contenido.

También tiene una buena documentación para ayudarlo a comenzar.

AjitS
fuente
2

Si los nodos de "contenido" se incluye la necesidad de permanecer inaccesible, y luego considerar el bloqueo / nodo / * en el servidor web "ubicación = / nodo / *" nivel . Denegar el acceso predeterminado a todos / nodos. De forma predeterminada, permite el acceso a los nodos que recibieron una ruta de ruta automática como / páginas.

(La contraseña básica .htaccess para subdirectorios también es una forma decente de bloquear la indexación de búsqueda accidental por parte de rastreadores externos).

Nunca puede garantizar que un nodo no sea accesible a través de un módulo contribuido que se instalará en el futuro, o uno que aún no comprende completamente. (Resultados de búsqueda, listados, vistas predeterminadas, descripción general de la categoría de taxonomía ...)

Para eso están los nodos.

¿Es la privacidad de su "contenido incluido" tan importante para usted? Si es así, entonces ...

  1. Todo lo que tenga una URL eventualmente será afectado por Google.

    Porque los motores de búsqueda no dependen solo de las arañas de enlace. También evalúan los comentarios del navegador, etc. Ningún módulo robot.txt o pathauto, globalredirect, rabbithole lo ayudará a dormir en paz. Si se puede acceder al nodo, se indexará. Tal vez por su propio navegador / complementos.

  2. Reconsidere si "el contenido que debe incluirse" realmente debería ser un nodo , si nadie debería acceder a él como una página .

    Si su "contenido incluido" se almacenaría dentro de un mini-panel / bloque / fragmento / bean / ..., entonces tiene un riesgo mucho menor de que aparezca en la lista o aparezca como una página con una URL automática que Aún no lo sé . (páginas de resumen de taxonomía, búsqueda, vistas ...)

usuario18099
fuente
0

El módulo Restrict Node Page View hace exactamente lo que desea.

De la descripción del módulo:

¿Alguna vez ha usado un tipo de nodo de presentación de diapositivas que necesita ser publicado pero no desea que el nodo sea accesible por sí mismo usando la ruta del nodo / XXX? ¡Este módulo es para ti!

Con este módulo puede restringir el acceso al fullmodo de vista del nodo , por lo que no puede acceder al nodo activado node/XXX.

Jdrupal
fuente