viernes, 8 de mayo de 2009

Experimentando con Landing Pages y Google Website Optimizer

Una de las primeras lecciones que uno aprende cuando se mete en el mundo del SEM es que el dinero se esfuma rápidamente (y además no suele ser tuyo :) ).

Uno cree que la campaña de AdWords es cojonuda, con buenos anuncios, buenos textos... con un buen proceso de alta, pero algunas veces se le da poca importancia a lo que hay en medio: la Landing Page.

La Landing Page (página de aterrizaje o bienvenida) es una de las que más ayuda al objetivo de las campañas SEM: la conversión de usuarios en clientes o la venta de un producto.

Una de las cosas que suele ser común cuando no hay mucha experiencia, es que se deja a la mano de los diseñadores la creación de estas páginas, sin pensar que dichas páginas pueden no ser la definitivas, que va a ser necesario realizar un testeo y que serán finalmente los usuarios (mediante las conversiones) quienes digan que landing page es la más adecuada para cada propósito.

Unos que estan realizando pruebas y aprendiendo de Landing Pages y GWO son los de InfoJobs.net.

Un ejemplo en vivo de Landing Page y GWO es la página de Publicar ofertas de trabajo gratis : http://www.infojobs.net/empresas/publicar-oferta

En este caso, hay configurado un Test A/B entero y no un Test Multi Variante.

Esto hace que si se coge la URL http://www.infojobs.net/empresas/publicar-oferta y se introduce en dos navegadores diferentes, es muy probable que salgan dos páginas diferentes.

Por que se hace esto? Muy simple, para ver la evolución de conversiones con cada variante de página y decidir cual es la mejor. Finalmente, la mejor de ellas, la que ha generado más conversiones es la que se acaba dejando o se utiliza para iniciar un nuevo test y mejorar continuamente en base a las preferencias de los usuarios.


martes, 31 de marzo de 2009

Script con Ruby para el cálculo del KEI

Bien, lo prometido es deuda. Así que ahí va el código Ruby. Requiere de dos "gemas" la de Ruport (para presentar los datos de una manera bonita) y la de Hpricot (para hacer el captura de información). El código no es que sea super "power", pero es útil y sobre todo ayuda a conseguir los datos que uno necesita de forma automática.

Si a partir de aquí alguien es capaz de mejorarlo para obtener información mejor, ni falta hace que pida que se comparta.

Require 'rubygems'
require 'ruport'
require 'ruport/util'
require 'hpricot'
require 'open-uri'

# -------------------------------
# Set start time and end time
# -------------------------------
BEGIN {
$startTime = Time. Now
print "Inicio: #{$startTime}\n"
}

END {
$endTime = Time. Now
print "Fin: #{$endTime}\n"
print "Tiempo total: (#{$endTime - $startTime})"
}

# --------------------------------------------------
# DEFINITION'S SECTION
# --------------------------------------------------
sfInQuerys = 'C:\\temp\\SEO\\KW. Txt'
sfOutText = 'C:\\temp\\SEO\\OutKW. Txt'
sfOutCSV = 'C:\\temp\\SEO\\OutKW. Csv'

# --------------------------------------------------
# Definition of the "Resume" table that collects:
# + KW
# + allinanchor
# + intitle
# + inurl
# --------------------------------------------------
tblResume = Table(%w[KW raw allinanchor intitle inurl])


# --------------------------------------------------
# Input and Output Files
# --------------------------------------------------
# Input file: Reads a file an puts all lines in an aQuerys array
fIn = File. New(sfInQuerys,"r")
aQuerys = fIn. Readlines
fIn. Close

# Output file
fOut = File. New(sfOutText, 'w+') # the output file


shortSleep = 30
longSleep = 15

# --------------------------------------------------
# Start read KW's
# --------------------------------------------------
for i in 0.. AQuerys. Length-1

kw = aQuerys[i]. Gsub(' ', '+'). Chomp

# KW
sSearchString = "http://www.google.es/search? Hl=es&client=firefox-a&q=" + kw + "&btnG=Buscar"
puts sSearchString
#doc = Hpricot(open(sSearchString, :proxy => 'http://172.20.6. 5:4546')) # open web page
doc = Hpricot(open(sSearchString)) # open web page
htmlElements = doc. Search("//div[@id='ssb']/p/b")
raw = htmlElements[2]. InnerText
sleep(shortSleep)

# allinanchor
sSearchString = "http://www.google.es/search? Hl=es&client=firefox-a&q=allinanchor%3A" + kw + "&btnG=Buscar"
#doc = Hpricot(open(sSearchString, :proxy => 'http://172.20.6. 5:4546')) # open web page
doc = Hpricot(open(sSearchString)) # open web page
htmlElements = doc. Search("//div[@id='ssb']/p/b")
allinanchor = htmlElements[2]. InnerText
sleep(shortSleep)

# intitle
sSearchString = "http://www.google.es/search? Hl=es&client=firefox-a&q=intitle%3A" + kw + "&btnG=Buscar"
#doc = Hpricot(open(sSearchString, :proxy => 'http://172.20.6. 5:4546')) # open web page
doc = Hpricot(open(sSearchString)) # open web page
htmlElements = doc. Search("//div[@id='ssb']/p/b")
intitle = htmlElements[2]. InnerText
&nbs

miércoles, 25 de febrero de 2009

¿Cómo separar las palabras clave en una URL?

Una de las dudas que algunas veces surge cuando se tiene que estructurar una URL para que sea entendible para los humanos es ¿cómo separar las palabras clave que componenen una URL? 

Leyendo una de las mejores referencias sobre como optimizar una URL "11 best practides for URLs" indica que es preferible utilizar y por este orden (-) guión medio, (_) guión bajo o subrallado, (+) más o incluso nada.
Hyphens Separate Best
When creating URLs with multiple words in the format of a phrase, hyphens are best to separate the terms (e.g. /brands/dolce-and-gabbana/), followed (in order) by, underscores (_), pluses (+) and nothing.
No obstante tampoco da una justificación de por que esto es así, de forma que voy a llevar a cabo un experimento consistente en crear 3 URLs con las mismas palabras clave para ver como las posiciona y investigar que posibilidades de búsqueda ofrece a la hora de obtenerlas como resultados. 

En un post expondré el resultado.

martes, 24 de febrero de 2009

¿Cómo calcular el KEI (Keyword Efectiveness Index)?

Estoy empezando a realizar un estudio de palabras clave para determinar cuales de ellas ofrecen mejores oportunidad para posicionar el site / landing en la que estoy trabajando.

Para ello, me baso en las recomendaciones del libro "Get to the top on Google" de David Viney. La verdad es que todo lo publicado allí parece muy coherente y muy simple.

Pero como siempre, cuando se trata de pasar de la teoria a la práctica, surgen dificultades.

¿Que es el KEI (Keyword Efectiveness Index)?

El KEI es un indice que indica la efectividad que puede tener una determinada palabra clave si tratamos de posicionar un site / landing utilizando esta.

Para realizar el cálculo del KEI se requiere previamente tener la siguiente información:

  • Lista de palabras clave (keywords) que se quieren estudiar
  • Keyword popularity (P), que seria de algun modo, la popularidad para los usuarios de esa palabra. Lo interpreto como el número de búsquedas mensuales de una determinada palabra. Esta información, se puede obtener públicamente de la herramienta de palabras clave de AdWords https://adwords.google.com/select/KeywordToolExternal. Hay mucha gente que habla de Overture, pero ahora es de pago.
  • Keyword competitiveness (C), que es la competitividad de una palabra, es decir, con cuantos sites/páginas indexadas en un Search Engine se compite. Esta información se puede obtener de Google realizando búsquedas para una determinada palabra clave y anotando el número de resultados que aparece en el lateral superior derecha. Este número da una idea del numero de páginas indexadas por este termino en Google (o para cada buscador que se esté trabajando).

Finalmente, el cáculo del KEI se realiza con la fórmula: KEI=P^2/C. Las palabras clave para las que se obtenga un valor más alto, son las que se deben considerar a la hora de posicionar la página /landing.

En caso de que se pueda, seria interesante complementar esta información con otra que se pudiera disponer fruto de AdWords. Será de gran valor obtener las conversiones de determinadas palabras clave, así como determinar si el tipo de usuarios que nos llegan via AdWords son los que esperamos o no.

Hasta aquí todo pinta bien, y para unas pocas palabras clave todo va viento en popa.

La gracia de ello es ¿cómo poder automatizar este proceso, teniendo en cuenta que hay información que proviene de diferentes orígenes de datos?

La parte de consultas recibidas por palabra clave, es simple. Desde la Herramienta de palabras clave AdWords se puede descargar un fichero CSV con la información.

Pero para obtener el Keyword Competitiveness, lo que se puede hacer es un pequeño script que vaya interrogando respetuosamente a Google (cuidado que puede banear la IP desde el cual se interroga) para cada palabra clave, parsear la página de resultados y consolidarlo en un fichero para luego combinarlo con la información del Keyword Popularity.

En el proximo post publicaré un script en Ruby que es útil para ello.