Ser capaces de extraer el dominio y los directorios de una url rápidamente nos puede facilitar enormemente nuestro día a día. Más, cuando no hablamos de un par de url’s si no de decenas o cientos de miles.
Gracias a esto, cruzando datos con otras fuentes, podemos sacar métricas útiles como el número de enlaces que tiene un directorio, CTR promedio, errores 404…(por citar algunos ejemplos).

Para poder mostrar cómo funciona, vamos a scrapear los resultados de Google con el bookmarlet del que hablaba en otro artículo y volcaremos los datos sobre un excel.
Función para extraer el dominio
Para crear nuestra función personalizada en VBA que extraiga el dominio vamos a utilizar condicionales y las funciones: Like, InStr, Mid, Left y Split.
- Like: para saber si contiene un string.
- InStr: para calcular la posición de un string
- Mid: para extraer desde una posición.
- Left: para extraer desde la izquierda un nº de caracteres.
- Split: para convertir la url en una matriz o array y extraer lo que queremos.
Código para extraer dominios
Copiamos y pegamos el siguiente código en nuestro entorno de desarrollo de VBA excel.
Function rcStrDomain(url As String) As String
'Comprobamos si el parámetro url es verdaderamente una url
If Left(url, 4) Like "http*" Then
'Extraemos todo lo que va después de //
url = Mid(url, InStr(url, "//") + 2)
Else
'Si no es una url, lo introducimos en la celda
rcStrDomain = "No es una url"
Exit Function
End If
'Comprobamos si el subdominio contiene las tres típicas www (o variaciones)
If Left(url, 4) Like "[Ww][Ww][Ww0-9]." Then
'De ser así, extraemos lo que va después de www (o variaciones)
url = Mid(url, 5)
End If
'Finalmente, la función devuelve la cadena de texto hasta que se encuentra el primer /.
rcStrDomain = Split(url, "/")(0)
End Function
Volvemos a nuestra hoja de excel y utilizamos la función creada pasándole como argumento la url:
=rcStrDomain(A2)

Función: extraer el 1º directorio
La cosa se complica, y es que para poder extraer los directorios de la url, además de condicionales y las funciones que hemos utilizado anteriormente, vamos a configurar un bucle For para poder analizar carácter por carácter y a utilizar la función Right (similar a Left).
Gracias al bucle podremos saber cuando una url contiene directorios (lo que implica que tiene que tener como mínimo 5 / ó 4 y que la url no termine en /).
Menudo lío… veámoslo con un par de ejemplos:
- Url con 5 /: https://www.genesis.es/seguros-coche/particulares/. En este caso es evidente que al menos existe un directorio.
- Url con 4 / que termina en /: https://www.genesis.es/seguros-coche/. En este caso nos encontramos una url sin directorios.
- Url con 4 / que no termina en /: https://www.genesis.es/seguros-coche/particulares.php. En este caso si que existe un directorio.
Código para extraer directorios
Copiamos y pegamos el siguiente código y veamos como funciona.
Function rcStrDomain1Path(url As String) As String
Dim intLenDomain As Integer
Dim byNumSlash As Byte
Dim i As Byte
Dim strCaractUrl As String
intLenDomain = Len(url)
byNumSlash = 0
If Left(url, 4) Like "http*" Then
url = Mid(url, InStr(url, "//") + 2)
Else
rcStrDomain1Path = "No es una url"
Exit Function
End If
If Left(url, 4) Like "[Ww][Ww][Ww0-9]." Then
url = Mid(url, 5)
End If
'Creamos un bucle para comprobar carácter por carácter el nº de / que hay en url
For i = 1 To intLenDomain
strCaractUrl = Mid(url, i, 1)
If (strCaractUrl = "/") Then byNumSlash = byNumSlash + 1
'Si el nº de / en url es igual que 2 implica que la url tiene un directorio si no termina en /
'Hay que recordar que el valor de url no es el del inicio, hemos quitado: http:// o
'https://, www., ww., ww3.,...etc
If (byNumSlash = 2) Then
'En caso de que no termine en /, si que es un directorio
If Right(url, 1) <> "/" Then
'La diferencia está en el paréntesis final(1). Antes la función devolvía la
'cadena de texto hasta que se encontaba el pimer /, osea, (0).
'Ahora devuelve la cadena que se encuentra entre el primer / y el segundo, osea, (1)
rcStrDomain1Path = Split(url, "/")(1)
Exit For
End If
End If
'Si el nº de / en url es mayor 2 implica que la url tiene un directorio como mínimo
If (byNumSlash > 2) Then
rcStrDomain1Path = Split(url, "/")(1)
Exit For
End If
Next i
End Function
Utilizamos nuestra nueva función:
=rcStrDomain1Path(A2)

Vemos como además de obtener los directorios, en caso de que alguna celda no contenga una url la función nos avisa correctamente.
Si quisiéramos extraer directorios de 2º, 3º… nivel simplemente hay que cambiar el último paréntesis (1) e ir añadiendo cifras: (2) para directorios de 2º nivel, (3) para tercer nivel y así sucesivamente.
Espero que el artículo te resulte de ayuda. Si te ha gustado, o si encuentras alguna errata o ves que algo no está bien explicado por favor deja un comentario. Aquí puedes aprender VBA Excel.
SIN UNA BUENA ESTRATEGIA ONLINE ESTÁS ABOCADO AL FRACASO
Aprende a hacer un plan de marketing y descarga nuestras plantillas.