Cómo visualizar y personalizar el análisis de backlinks con Python

[ad_1]

Lo más probable es que haya utilizado una de las herramientas más populares, como Ahrefs o Semrush, para analizar los vínculos de retroceso de su sitio.

Estas herramientas rastrean la web para obtener una lista de sitios que se vinculan a su sitio web con una calificación de dominio y otros datos que describen la calidad de sus vínculos de retroceso.

No es ningún secreto que los backlinks juegan un papel importante en el algoritmo de Googlepor lo que tiene sentido como mínimo comprender su propio sitio antes de compararlo con la competencia.

Si bien el uso de herramientas le brinda información sobre métricas específicas, aprender a analizar los vínculos de retroceso por su cuenta le brinda más flexibilidad sobre lo que está midiendo y cómo se presenta.

Y aunque podría hacer la mayor parte del análisis en una hoja de cálculo, Python tiene ciertas ventajas.

Aparte de la gran cantidad de filas que puede manipular, también puede mirar más fácilmente el lado estadístico, como las distribuciones.

En esta columna, encontrará instrucciones camino a camino sobre cómo visualizar el análisis básico de backlinks y personalizar sus informes considerando diferentes atributos de enlaces usando Python.

no tomar asiento

Vamos a elegir un pequeño sitio web del sector de muebles del Reino Unido como ejemplo y realizar un análisis básico usando Python.

Entonces, ¿cuál es el valor de los vínculos de retroceso de un sitio para SEO?

En su forma más simple, diría calidad y cantidad.

La calidad es subjetiva para el experto pero definitiva para Google a través de métricas como la autoridad y la relevancia del contenido.

Comenzaremos evaluando la calidad del enlace con los datos disponibles antes de evaluar la cantidad.

Hora de codificar.

import re
import time
import random
import pandas as pd
import numpy as np
import datetime
from datetime import timedelta
from plotnine import *
import matplotlib.pyplot as plt
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype
import uritools  
pd.set_option('display.max_colwidth', None)
%matplotlib inline

root_domain = 'johnsankey.co.uk'
hostdomain = 'www.johnsankey.co.uk'
hostname="johnsankey"
full_domain = 'https://www.johnsankey.co.uk'
target_name="John Sankey"

Comenzamos importando los datos y limpiando los nombres de las columnas para que sea más fácil de manipular y más rápido de escribir para las etapas posteriores.

target_ahrefs_raw = pd.read_csv(
    'data/johnsankey.co.uk-refdomains-subdomains__2022-03-18_15-15-47.csv')

Las listas de comprensión son una forma poderosa y menos intensiva de limpiar los nombres de las columnas.

target_ahrefs_raw.columns = [col.lower() for col in target_ahrefs_raw.columns]

La comprensión de la lista le indica a Python que convierta el nombre de la columna a minúsculas para cada columna (‘col’) en las columnas del marco de datos.

target_ahrefs_raw.columns = [col.replace(' ','_') for col in target_ahrefs_raw.columns]
target_ahrefs_raw.columns = [col.replace('.','_') for col in target_ahrefs_raw.columns]
target_ahrefs_raw.columns = [col.replace('__','_') for col in target_ahrefs_raw.columns]
target_ahrefs_raw.columns = [col.replace('(','') for col in target_ahrefs_raw.columns]
target_ahrefs_raw.columns = [col.replace(')','') for col in target_ahrefs_raw.columns]
target_ahrefs_raw.columns = [col.replace('%','') for col in target_ahrefs_raw.columns]

Aunque no es estrictamente necesario, me gusta tener una columna de conteo como estándar para agregaciones y un «proyecto» de columna de valor único en caso de que necesite agrupar toda la tabla.

target_ahrefs_raw['rd_count'] = 1
target_ahrefs_raw['project'] = target_name
target_ahrefs_raw
Captura de pantalla de Pandas, marzo de 2022

Ahora tenemos un marco de datos con nombres de columna limpios.

El siguiente camino es limpiar los valores reales de la tabla y hacerlos más útiles para el análisis.

Haga una copia del marco de datos anterior y asígnele un nuevo nombre.

target_ahrefs_clean_dtypes = target_ahrefs_raw

Limpie la columna dofollow_ref_domains, que nos dice cuántos dominios de referencia tiene el enlace del sitio.

En este caso, convertiremos los guiones en ceros y luego convertiremos toda la columna en un número entero.

# referring_domains
target_ahrefs_clean_dtypes['dofollow_ref_domains'] = np.where(target_ahrefs_clean_dtypes['dofollow_ref_domains'] == '-',
                                                              0, target_ahrefs_clean_dtypes['dofollow_ref_domains'])
target_ahrefs_clean_dtypes['dofollow_ref_domains'] = target_ahrefs_clean_dtypes['dofollow_ref_domains'].astype(int)


# linked_domains
target_ahrefs_clean_dtypes['dofollow_linked_domains'] = np.where(target_ahrefs_clean_dtypes['dofollow_linked_domains'] == '-',
                                                           0, target_ahrefs_clean_dtypes['dofollow_linked_domains'])
target_ahrefs_clean_dtypes['dofollow_linked_domains'] = target_ahrefs_clean_dtypes['dofollow_linked_domains'].astype(int)

First_seen nos dice la fecha en que se encontró el enlace por primera vez.

Convertiremos la cadena a un formato de fecha que Python pueda procesar y luego lo usaremos para derivar la edad de los enlaces más adelante.

# first_seen
target_ahrefs_clean_dtypes['first_seen'] = pd.to_datetime(target_ahrefs_clean_dtypes['first_seen'], format="%d/%m/%Y %H:%M")

Convertir first_seen en una fecha también significa que podemos realizar agregaciones de tiempo por mes y año.

Esto es útil ya que no siempre es el caso de que los enlaces para un sitio se adquieran diariamente, ¡aunque sería bueno para mi propio sitio si lo hiciera!

target_ahrefs_clean_dtypes['month_year'] = target_ahrefs_clean_dtypes['first_seen'].dt.to_period('M')

La antigüedad del enlace se calcula tomando la fecha de hoy y restando la fecha de la primera vez que se vio.

Luego se convierte a un formato de número y se divide por un número enorme para obtener la cantidad de días.

# link age
target_ahrefs_clean_dtypes['link_age'] = datetime.datetime.now() - target_ahrefs_clean_dtypes['first_seen']
target_ahrefs_clean_dtypes['link_age'] = target_ahrefs_clean_dtypes['link_age']
target_ahrefs_clean_dtypes['link_age'] = target_ahrefs_clean_dtypes['link_age'].astype(int)
target_ahrefs_clean_dtypes['link_age'] = (target_ahrefs_clean_dtypes['link_age']/(3600 * 24 * 1000000000)).round(0)
target_ahrefs_clean_dtypes
Captura de pantalla de Pandas, marzo de 2022

Con los tipos de datos limpios y algunas funciones de datos nuevas creadas, ¡la diversión puede comenzar!

La calidad del enlace

La primera parte de nuestro análisis evalúa la calidad del enlaceque resume todo el marco de datos mediante la función de descripción para obtener estadísticas descriptivas de todas las columnas.

target_ahrefs_analysis = target_ahrefs_clean_dtypes
target_ahrefs_analysis.describe()
Captura de pantalla de Pandas, marzo de 2022

Entonces, en la tabla anterior, podemos ver el promedio (media), el número de dominios de referencia (107) y la variación (el percentil 25, etc.).

La calificación de dominio promedio (equivalente a la autoridad de dominio de Moz) de los dominios de referencia es 27.

¿Eso es algo bueno?

En ausencia de datos de la competencia para comparar en este sector del mercado, es arduo saberlo. Aquí es donde entra en juego su experiencia como profesional de SEO.

Sin embargo, estoy seguro de que todos podríamos estar de acuerdo en que podría ser mayor.

Cuánto más alto para hacer un cambio es otra cuestión.

Captura de pantalla de Pandas, marzo de 2022

La tabla anterior puede ser un poco seca y arduo de visualizar, por lo que trazaremos un histograma para obtener una comprensión intuitiva de la autoridad del dominio de referencia.

dr_dist_plt = (
    ggplot(target_ahrefs_analysis, aes(x = 'dr')) + 
    geom_histogram(alpha = 0.6, fill="blue", bins = 100) +
    scale_y_continuous() +   
    theme(legend_position = 'right'))
dr_dist_plt
Scaptura de pantalla del autor, marzo de 2022

La distribución está muy sesgada, lo que muestra que la mayoría de los dominios de referencia tienen una calificación de autoridad de cero.

Más allá de cero, la distribución parece bastante uniforme, con la misma cantidad de dominios en diferentes niveles de autoridad.

Edad del enlace es otro factor importante para el SEO.

Veamos la distribución a continuación.

linkage_dist_plt = (
    ggplot(target_ahrefs_analysis, 
           aes(x = 'link_age')) + 
    geom_histogram(alpha = 0.6, fill="blue", bins = 100) +
    scale_y_continuous() +   
    theme(legend_position = 'right'))
linkage_dist_plt
Captura de pantalla del autor, marzo de 2022

La distribución parece más normal, incluso si todavía está sesgada, ya que la mayoría de los enlaces son nuevos.

La edad de enlace más común parece ser de alrededor de 200 días, que es menos de un año, lo que sugiere que la mayoría de los enlaces se adquirieron recientemente.

Por interés, veamos cómo se correlaciona esto con la autoridad de dominio.

dr_linkage_plt = (
    ggplot(target_ahrefs_analysis, 
           aes(x = 'dr', y = 'link_age')) + 
    geom_point(alpha = 0.4, colour="blue", size = 2) +
    geom_smooth(method = 'lm', se = False, colour="red", size = 3, alpha = 0.4)
)

print(target_ahrefs_analysis['dr'].corr(target_ahrefs_analysis['link_age']))
dr_linkage_plt

0.1941101232345909
Captura de pantalla del autor, marzo de 2022

El gráfico (junto con la cifra de 0,19 impresa arriba) no muestra correlación entre los dos.

¿Y por qué debería haberlo?

Una correlación solo implicaría que los enlaces de mayor autoridad se adquirieron en la fase inicial de la historia del sitio.

La razón de la no correlación se hará más evidente más adelante.

Ahora veremos la calidad del enlace a lo largo del tiempo.

Si tuviéramos que trazar literalmente el número de enlaces por fecha, la serie de tiempo se vería bastante desordenada y menos útil como se muestra a continuación (no se proporciona código para representar el gráfico).

Para lograr esto, calcularemos un promedio móvil de la calificación de dominio por mes del año.

Tenga en cuenta la función de expansión (), que indica a Pandas que incluya todas las filas anteriores con cada fila nueva.

target_rd_cummean_df = target_ahrefs_analysis
target_rd_mean_df = target_rd_cummean_df.groupby(['month_year'])['dr'].sum().reset_index()
target_rd_mean_df['dr_runavg'] = target_rd_mean_df['dr'].expanding().mean()
target_rd_mean_df
Captura de pantalla de Pandas, marzo de 2022

Ahora tenemos una tabla que podemos usar para alimentar el gráfico y visualizarlo.

dr_cummean_smooth_plt = (
    ggplot(target_rd_mean_df, aes(x = 'month_year', y = 'dr_runavg', group = 1)) + 
    geom_line(alpha = 0.6, colour="blue", size = 2) +
    scale_y_continuous() +
    scale_x_date() +
    theme(legend_position = 'right', 
          axis_text_x=element_text(rotation=90, hjust=1)
         ))
dr_cummean_smooth_plt
Captura de pantalla del autor, marzo de 2022

Esto es bastante interesante ya que parece que el sitio comenzó atrayendo enlaces de alta autoridad al comienzo de su tiempo (probablemente una campaña de relaciones públicas para lanzar el negocio).

Luego se desvaneció durante cuatro años antes de volver a aparecer con una nueva adquisición de enlaces de enlaces de alta autoridad nuevamente.

Volumen de enlaces

¡Suena bien simplemente escribir ese encabezado!

¿Quién no querría un gran volumen de (buenos) enlaces a su sitio?

La calidad es una cosa; el volumen es otro, que es el que analizaremos a continuación.

Al igual que la operación anterior, usaremos la función de expansión para calcular una suma acumulativa de los enlaces adquiridos hasta la fecha.

target_count_cumsum_df = target_ahrefs_analysis
target_count_cumsum_df = target_count_cumsum_df.groupby(['month_year'])['rd_count'].sum().reset_index()
target_count_cumsum_df['count_runsum'] = target_count_cumsum_df['rd_count'].expanding().sum()
target_count_cumsum_df
Captura de pantalla de Pandas, marzo de 2022

Esos son los datos, ahora el gráfico.

target_count_cumsum_plt = (
    ggplot(target_count_cumsum_df, aes(x = 'month_year', y = 'count_runsum', group = 1)) + 
    geom_line(alpha = 0.6, colour="blue", size = 2) +
    scale_y_continuous() + 
    scale_x_date() +
    theme(legend_position = 'right', 
          axis_text_x=element_text(rotation=90, hjust=1)
         ))
target_count_cumsum_plt
Captura de pantalla del autor, marzo de 2022

Vemos que los enlaces adquiridos a principios de 2017 se ralentizaron pero se agregaron de manera constante durante los siguientes cuatro años antes de acelerar nuevamente alrededor de marzo de 2021.

Nuevamente, sería bueno correlacionar eso con el rendimiento.

Llevándolo más lejos

Por supuesto, lo anterior es solo la punta del iceberg, ya que es una simple exploración de un sitio. Es arduo inferir algo útil para mejorar las clasificaciones en espacios de búsqueda competitivos.

A continuación se presentan algunas áreas para una mayor exploración y análisis de datos.

  • Agregar datos compartidos en redes sociales a ambas direcciones URL de destino.
  • Correlación de la visibilidad general del sitio con el DR promedio móvil tiempo extraordinario.
  • Trazado de la distribución de DR tiempo extraordinario.
  • Adición de datos de volumen de búsqueda en los nombres de host para ver cuántas búsquedas de marca reciben los dominios de referencia como una medida de autoridad real.
  • Unirse con datos de rastreo a las URL de destino para probar la relevancia del contenido.
  • Velocidad de enlace – la velocidad a la que se adquieren nuevos enlaces de nuevos sitios.
  • Integrando todas las ideas anteriores en su análisis para comparar con sus competidores.

Estoy seguro de que hay muchas ideas que no figuran en la lista anterior, siéntase libre de compartir a continuación.

Más recursos:


Imagen destacada: metamorworks/Shutterstock

!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window,document,'script', 'https://connect.facebook.net/en_US/fbevents.js');

if( typeof sopp !== "undefined" && sopp === 'yes' ){ fbq('dataProcessingOptions', ['LDU'], 1, 1000); }else{ fbq('dataProcessingOptions', []); }

fbq('init', '1321385257908563');

fbq('track', 'PageView');

fbq('trackSingle', '1321385257908563', 'ViewContent', { content_name: 'backlink-analysis-using-python', content_category: 'linkbuilding seo ' });



[ad_2]

Consultar el artículo en la publicación original

Cómo visualizar y personalizar el análisis de backlinks con Python
Salir de la versión móvil