Gravatar de Armonth

Adsense y plugins poco eficientes: MoreMoney

Recientemente estuve ayudando a un conocido a optimizar WordPress, tenía problemas de CPU que le causaban problemas con el hosting compartido y aún tengo pendiente de escribir sobre ello pero todavía no es el momento…

Pero sí que quiero aprovechar para comentar que me dí cuenta de que las visitas desde Google causaban mucho más consumo que normalmente: El causante era WordPress Plugin MoreMoney un plugin que tiene como objetivo principal mostrar publicidad Adsense cuando el visitante viene desde buscadores.

En principio tenía mis dudas, no sé mucho de programación (sinceramente, si tuviera que hacer un plugin similar seguramente metería cosas peores) pero el plugin me puso la mosca detrás de la oreja y después de consultar a alguien que sí sabe lo suyo me dio los siguientes puntos:

  • Overbloated, lo que hace el código complejo y que consume mucho.
  • Mezcla distintos tipos de expresiones regulares.
  • Aún así la lógica del código puede ser simplificada mucho.

Y es que mezclar preg_replace y eregi está mal. Fue desactivar el plugin y aplicar otro método similar para ver un aumento de rendimiento más que notable…

En defensa del plugin tengo que decir que no fue el culpable de los problemas de CPU (los tiros van por otro sitio) pero sí que ayudo a empeorarlo ya que es poco eficiente.

Alternativa

La solución que yo uso para mostrar publicidad a los visitantes desde buscadores — realmente no necesito más — es la misma que se puede ver en el código del menéame, en una sola línea:

  if (preg_match('/q=|search/', $_SERVER['HTTP_REFERER']) ) {

La sentencia anterior viene a ser que si el referido (HTTP_REFERER) incluye /q= o search/ entonces se debe ejecutar lo que viene entre { y }. Por ejemplo Google envía de referido algo parecido a http://www.google.es/search?q= por lo que la sentencia saltará.

No es perfecto ya que no lo coge absolutamente todo pero coge el 99% de búsquedas desde buscadores y funciona. Todo ello en una línea de código, y muy simple, se aplica perfectamente el principio KISS.

Aplicándolo en WordPress

Como colofón final, una manera fácil de aplicarlo a WordPress y WP-Cache es la siguiente:

  1. Crea un fichero ad.php en el directorio de tu plantilla.
  2. Introduce el siguiente código en ad.php:

    <?php
      if (preg_match('/q=|search/', $_SERVER['HTTP_REFERER']) ) {
        print 'aquí el codigo Adsense, tal cual te lo da Google';
      }
    ?>
    
  3. Opcional: El ejemplo es para mostrar Adsense pero puedes poner cualquier cosa dentro del print.
  4. Donde quieras que se muestre ese bloque adsense (sólo para quienes vengan desde buscadores) metes el código para ejecutar ese fichero php de forma dinámica que aparece en la documentación de WP-Cache:

    <!--mclude wp-content/themes/plantilla/ad.php-->
      <?php include_once(ABSPATH . 'wp-content/themes/plantilla/ad.php'); ?>
    <!--/mclude-->
    

No seré programador, pero sé reconocer cuando algo es tan simple que es brillante y pienso ¿cómo no se me ocurrió a mí?.

29 Comentarios (feed)

  1. Gravatar de Sergio de la Torre Sergio de la Torre nos comenta:

    Interesante… a ver si tengo un ratillo y lo pruebo :)

    Gracias

    Domingo, 4 de Febrero/2007 @ 15:03

  2. Gravatar de Pablo Reyes Pablo Reyes nos comenta:

    ¿Por qué mostrar anuncios solo a visitantes de Buscadores y no a todos?

    Domingo, 4 de Febrero/2007 @ 19:23

  3. Gravatar de Sergio de la Torre Sergio de la Torre nos comenta:

    A.- “Respetar” a tus lectores habituales
    B.- Es mas efectiva sobre visitantes fortuitos (los habitules acaban ignorando la publi)

    Domingo, 4 de Febrero/2007 @ 19:44

  4. Gravatar de Armonth Armonth nos comenta:

    y C.- Yo lo que hago es cambiar la publi según el origen :P

    Domingo, 4 de Febrero/2007 @ 21:20

  5. Gravatar de Sergio de la Torre Sergio de la Torre nos comenta:

    encima o debajo del post? Mmm… ingenioso. No lo había visto (uso adblock :D )

    Domingo, 4 de Febrero/2007 @ 22:11

  6. Gravatar de InKiLiNo InKiLiNo nos comenta:

    Pues lo voy a probar, aunque lo del wp-cache no lo entiendo mucho :P

    Domingo, 4 de Febrero/2007 @ 23:54

  7. Gravatar de Armonth Armonth nos comenta:

    Inkilino: pues para que el script se ejecute dinámicamente aunque la página sea estática… si no a la primera cacheada ya no funcionaría.

    Lunes, 5 de Febrero/2007 @ 0:02

  8. Gravatar de felipe.lavin felipe.lavin nos comenta:

    Hace tiempo escribí dos artículos sobre WordPress y uso de CPU que podrían ayudar: WordPress y uso de CPU: algunas lecciones y Optimizar automáticamente tu base de datos

    Sobre el método que presentas, está excelente… simple y efectivo

    Lunes, 5 de Febrero/2007 @ 2:22

  9. Gravatar de Armonth Armonth nos comenta:

    Sí Felipe… todo lo que cuentas ahí tiene mucho que ver con lo que tengo pendiente de comentar :)

    Lunes, 5 de Febrero/2007 @ 3:28

  10. Gravatar de aNieto2k aNieto2k nos comenta:

    Hector, una cosa. Dices que es poco eficiente y la verdad es que no voy a discutir si lo es o no, pero la Alternativa que tienes solo cubre una parte de la funcionalidad que el plugin tiene.

    Osea, te permite saber si vienen de un motor de busqueda, pero no permite añadir demás sitios (meneame, barrapunto, digg,…) ni filtrar por palabras clave que el plugin si permite hacer.

    Supongo que si empezamos a añadir funcionalidades al final todo consume procesador.
    Esto no quita esté o no optimizado, solo es una puntualización.

    Martes, 6 de Febrero/2007 @ 1:28

  11. Gravatar de aNieto2k aNieto2k nos comenta:

    Por cierto, el wp-cache en algunas ocaciones cachea el envio del comentario y da la sensación de que no se ha añadido el comentario. Hay que recargar la página para ver el comentario.

    Me acaba de pasar, por eso te lo digo ;)

    Martes, 6 de Febrero/2007 @ 1:31

  12. Gravatar de Armonth Armonth nos comenta:

    aNieto2k la alternativa como ya digo es para lo que yo lo uso y por tanto no necesito más. Obviamente cuánto más opciones/complejo más consume pero lo que comentaba arriba esos puntos es precisamente eso: que podría ser más simple sin perder funcionalidad…

    Sobre el WP-Cache, a mí me ha pasado lo mismo pero sin llegar a tener el WP-cache activado (o en blogs que no lo usan) y me he quedado extrañado, no sé, al menos lo que yo he visto lo apunto más hacía Firefox/Iceweasel…

    Martes, 6 de Febrero/2007 @ 1:33

  13. Gravatar de Agamum Agamum nos comenta:

    Realmente interesante tu post, aunque sería más interesante todavía si en lugar de optar por una solución tan simple se te hubiera ocurrido optimizar el código del plugin… ;) (así los que lo usamos estaríamos más contentos).

    Lunes, 12 de Febrero/2007 @ 1:48

  14. Gravatar de Armonth Armonth nos comenta:

    Agamum como ya dije, la solución simple es justo lo que yo necesito (si necesitase más opciones pues sí, la alternativa que ofrezco no sería óptima) y sobre optimización pues no pero ya hablé con el autor y me dijo que se lo apuntaba para cuando pudiera :)

    Lunes, 12 de Febrero/2007 @ 4:11

  15. Gravatar de aNieto2k aNieto2k nos comenta:

    Fiera tienes la variable TEMPLATEPATH, para definir la ruta del theme.

    Asi te valdrá para cualquier theme ;)

    Saludos.

    Viernes, 2 de Marzo/2007 @ 21:38

  16. Gravatar de InKiLiNo InKiLiNo nos comenta:

    Iva de muerte hasta que…

    resulta que el wp-cache me da un error cuando entras en el blog directamente, creo que lo que pasa, es que en la cache se queda guardado el blog con publicidad cuando alguien entra desde un buscador, y entonces cuando viene una vista directa le da un error.

    Lo he estado mirando y nos e como solucionarlo :(

    ¡¡¡¡¡¡¡¡¡¡¡ Help !!!!!!!!

    Lunes, 19 de Marzo/2007 @ 12:33

  17. Gravatar de Armonth Armonth nos comenta:

    Inkilino usa el código tal y cómo está en el ejemplo y ten en cuenta que desde la página cacheada no se puede llamar a funciones de WordPress osea que todo contenido cacheado que quieras que ejecute algo de PHP debe tenerlo “a mano” (ie: un fichero .php aparte) capaz de funcionar sin depender de WordPress…

    Lunes, 19 de Marzo/2007 @ 21:50

  18. Gravatar de eTrueke eTrueke nos comenta:

    Que ingenioso!!!

    Voy a investigar a ver como puedo sacar el referer con rails.

    Un saludo!

    Domingo, 6 de Mayo/2007 @ 16:51

  19. Gravatar de la bloga la bloga nos comenta:

    Gracias Armonth, espero eso solucione una razón que me obligó a limitarme en cuanto a Wordpress

    Lunes, 14 de Mayo/2007 @ 18:41

  20. Gravatar de javipas javipas nos comenta:

    Muy interesante, armonth, pero lo cierto es que no consigo que funcione. En qué parte exacta del plugin wp-cache hay que meter el código mclude al que haces referencia?

    ¿Alguien lo sabe?

    Jueves, 24 de Mayo/2007 @ 13:20

  21. Gravatar de Armonth Armonth nos comenta:

    No no, javipas no hay que poner ningún código en WP-Cache, mira, tu en tu plantilla (supongamos wp-content/themes/plantilla) te creas el fichero ad.php — o cualquier fichero/programa en PHP que quieras que se ejecute cada vez en la web sin tener en cuenta la cache.

    Por ejemplo, un date() sirve para eso. Luego en donde quieras que se ejecute el contenido de ese fichero php tienes que poner el mclude… ¿que lo quieres en el menú? pues abres el sidebar.php y en lugar de poner el típico <?php funcion-en-php() ?> pones el mclude con la ruta completa tal como aparece en el ejemplo.

    Los ficheros del wp-cache no hay que tocarlas para nada.

    Jueves, 24 de Mayo/2007 @ 14:23

  22. Gravatar de javipas javipas nos comenta:

    Pues eso es lo que había entendido incialmente, y es lo que había probado, pero no me salía y por eso pensé que había que hacerlo en wp-cache.php. Así que lo que había hecho - todavía está así - es incluirlo en page.php, que queda más o menos así:

    … y sigue

    Y mi fichero ad.php está en wp-content/adsense/ad.php, y es tal cual:

    ¿Qué hago mal? Hago una búsqueda en Google de alguna entrada y llego a esa entrada a través de Google, pero como si no…

    Jueves, 24 de Mayo/2007 @ 18:30

  23. Gravatar de javipas javipas nos comenta:

    Uy, no sale el código en los comentarios. Bueno, te lo envío por correo… :-(

    Jueves, 24 de Mayo/2007 @ 18:31

  24. Gravatar de Maski Maski nos comenta:

    Oye… muy bueno tu post… he probado entrar directamente y desde algun buscador y funciona perfectamente, de hecho ya lo implemente en un mi sitio.

    Ahora tengo varias preguntas… al parecer tu no tienes muchos adsense en la pagina, asi que mis dudas son:

    1.- has visto algun cambio notable en tus ingresos al no imprimir anuncios a tus visitantes habituales?

    2.- con respecto al wp-cache, realmente te funciona? yo tengo la idea que la pagina en memoria (cache) no desplegaria los anuncios nunca…

    gracias

    Miércoles, 30 de Mayo/2007 @ 7:22

  25. Gravatar de Armonth Armonth nos comenta:

    Maski:

    1. Pues hace tiempo que lo tengo así, no sé si me impacta negativamente en los beneficios actualmente pero en el pasado casi no se notó y encima aumento el CTR así que no creo que se note mucho… y por unos céntimos más no vale la pena molestar a tus habituales.

    2. Sí funciona, si miras en wp-content/cache/ un fichero html que tenga ése mclude verás que la web es 100% HTML (todo el PHP procesado) salvo el mclude que se “conserva” en PHP.

    Precisamente como el HTML es 100% HTML es tan bueno el cache: no carga PARA NADA el código de WordPress, pero precisamente por eso no se pueden usar funciones de WordPress: hay que implementar lo que quieras que sea dinámico desde cero. Pero para códigos como ese no es nada difícil.

    En la práctica el cache equivale a tener una página 100% estática a la que le cambias la extensión y le añades un include de PHP con un par de funciones…

    Miércoles, 30 de Mayo/2007 @ 10:50

  26. Gravatar de Manz Manz nos comenta:

    Volviendo al artículo en sí, se puede refinar un poco más en ámbitos de eficiencia si reemplazamos el uso de preg_match, donde estamos usando un autómata para una expresión regular bastante simple, por un doble strpos, que además, creo recordar que en PHP se evalua en circuito corto, lo que lo hace todavía más rápido.

    Las expresiones regulares son muy potentes pero también mucho más lentas.

    Saludos ^^

    Miércoles, 18 de Julio/2007 @ 1:40

  27. Gravatar de e-saiz e-saiz nos comenta:

    Bueno un buen truco al que llego desde el blog de Inkilino, jejeje, la verdad es que ahora que me había planteado tener adsense de nuevo es una buena forma de no penalizar a la gente que suele leer el blog normalmente.

    Miércoles, 1 de Agosto/2007 @ 16:50

  28. Gravatar de DISSENY WEB DISSENY WEB nos comenta:

    100% de acuerdo! Con experiencia se van mejorando esos aspectos menores. ;)

    Miércoles, 13 de Agosto/2008 @ 20:21

  29. Gravatar de tomás tomás nos comenta:

    hola, desearia saber cual es el codigo para cualquier visitante que venga con un referido cualquiera, distinto del dominio propio.

    y si se puede mostrar un texto distinto al texto predeterminado al llegar con un referido.

    Martes, 16 de Septiembre/2008 @ 23:25

Comentarios cerrados