Python es una enorme herramienta para hacer de manera automática tareas repetitivas y conseguir mucho más información sobre sus datos.
En el artículo, va a aprender de qué manera hacer una herramienta para contrastar qué keywords están cerca de clasificarse en las situaciones uno a tres y va a recibir una alarma si existe la posibilidad de emplear esas keywords de manera natural en la página.
Es especial tanto para principiantes para expertos de Python y es una increíble introducción al empleo de Python para SEO.
Si deseas quedarte atrapado dentro, lo tienes. Petición simplificada libre para código Es simple de utilizar y no necesita experiencia en codificación.
Asimismo hay una Hoja de colaboración de Google plus si quiere buscar el código. Si puede seguir un portal de internet, ¡puede utilizar este script!
Este es un caso de muestra de lo que vamos a hacer el día de hoy:

Estas keywords se tienen la posibilidad de hallar en el título de la página y en H1, pero no en copia. Naturalmente, añadir estas keywords a su copia que existe sería una forma simple de acrecentar la importancia de estas keywords.
Al apuntar a los buscadores web y, naturalmente, integrar las keywords faltantes para las que un lugar ahora está clasificado, aumentamos la seguridad del motor de búsqueda para clasificar esas keywords mucho más arriba en los SERP.
Este informe se puede hacer de forma manual, pero transporta algo de tiempo.
Entonces, automatizaremos el desarrollo utilizando un script Python SEO.
Salir de la perspectiva
Aquí hay un caso de muestra de de qué manera se va a ver el resultado final tras realizar el informe:

El resultado final toma las cinco ocasiones primordiales según el volumen de búsqueda de cada página y las clasifica horizontalmente, adjuntado con el volumen de búsqueda estimado.
Asimismo exhibe el volumen de búsqueda total de todas y cada una de las keywords que tiene una página a una distancia del resultado, tal como el total de keywords libres.
Las cinco keywords primordiales por volumen de búsqueda se comprueban por título, H1 o copia, y después se marcan como VERDADERO o FALSO.
¡O sea excelente para localizar victorias veloces! Sencillamente añada la keyword que falta de manera natural a la copia de su página, título o H1.
para empezar
La instalación es bastante fácil. Todo cuanto debemos llevar a cabo es seguir el lugar (idealmente con una extracción de copia adaptada que quiera contrastar) y un fichero exportado con todas y cada una de las keywords para las que se clasifica un ubicación.
Esta publicación lo guiará mediante la configuración, el código y lo mandará a una hoja de Google plus Colaboratory si solo desea quedarse atascado sin codificarlo usted mismo.
Para iniciar precisarás:
Lo llamé Kick Distance Report por el hecho de que apunta a keywords que son de forma fácil alcanzables caminando.
(Definimos la distancia para adivinar como una keyword que va de 4 a 20, pero la transformamos en una alternativa configurable si quiere determinar sus factores).
Pasmante informe recóndito de SEO: Primeros pasos
1. Escanee el ubicación de destino
- Configure un extractor de copia de página personalizado (opcional, pero sugerido).
- Filtrar páginas de rastreo.
2. Exporte todas y cada una de las keywords clasificadas del lugar usando su distribuidor favorito
- Filtrar keywords activadas como link al ubicación.
- Suprima las keywords que se disparan como una imagen.
- Filtra las keywords de tu marca.
- Utilice las dos exportaciones para hacer un increíble informe de distancia de keywords y escanear sus datos de Python.
Escaneo del ubicación
Escogí emplear Screaming Frog para conseguir ingreso inicial. Cualquier rastreador va a funcionar siempre y cuando la exportación CSV use exactamente los mismos nombres de columna o se cambie el nombre a fin de que coincida.
El script espera localizar las próximas columnas en la exportación CSV escaneada:
"Address", "Title 1", "H1-1", "Copy 1", "Indexability"
Configuración de ingreso a escaneo
La primera cosa que debemos llevar a cabo es proceder a los cambios de configuración primordiales en Screaming Frog:
Configuración > Araña > Escanear
Los primordiales cambios a usar son:
Escanear links internos, cánones, Y Página (Rel Siguiente / Previo) colocación.
(La secuencia de comandos va a funcionar con cualquier otra cosa que escoja, ¡pero va a llevar mucho más tiempo llenar el escaneo!)

entonces esta encendido Extracción línea.
Configuración > Araña > Extracción

Por lo menos, requerimos obtener el título de la página, H1, y calcular si la página es indexable, como se expone ahora.
La indexación es útil pues es una forma simple a fin de que el script identifique las dirección de Internet que se tienen la posibilidad de remover de una vez, dejando solo las keywords que se tienen la posibilidad de clasificar en las SERP.
Si el script no puede localizar la columna indexable, proseguirá andando comunmente, pero no distinguirá entre las páginas que se tienen la posibilidad de clasificar y las que no se tienen la posibilidad de clasificar.
Modificar un extractor de copia de página personalizado
Para contrastar si se halló una keyword en la copia de la página, debemos modificar un extractor personalizado en Screaming Frog.
Configuración> Personalizado> Obtener
Asigne un nombre al extractor «Copiar» como se expone ahora.

Esencial: El script espera que el extractor se llame «Copiar» como se señala arriba, ¡conque compruébelo!
Al final, asegúrese Obtener artículo se escoge para exportar la copia como artículo, no como HTML.
Existen muchas guías para utilizar tiradores customizados on line, si precisa asistencia para modificar uno, entonces no volveré aquí.
Cuando se configura la extracción, es hora de seguir el ubicación y exportar el fichero HTML en formato CSV.
Exportación de ficheros CSV
Exportar el fichero CSV es tan simple como cambiar el menú desplegable que se expone en De adentro A HTML y presionando el botón Exportar.
De adentro> HTML> Exportar

Tras clickear ExportarEs esencial cerciorarse de que el tipo esté configurado en formato CSV.
La pantalla de exportación debería verse de esta forma:

Consejo 1: filtre las páginas de paginación
Te invito a que filtres las páginas que escaneas eligiendo entre las páginas Respetar lo siguiente/previo bajo la Adelantado configuración (o sencillamente elimínelos del fichero CSV si lo elige).

Consejo 2: Guarde la configuración de ingreso para escaneo
Cuando haya configurado su escaneo, merece la pena almacenar su configuración de escaneo (que asimismo recordará su extracción adaptada).
Esto le ahorrará bastante tiempo si quiere regresar a usar el script más adelante.
Fichero > Configuración > Almacenar como

Exportar keywords
Cuando disponemos el fichero de comienzo de sesión del rastreador, el próximo paso es cargar su herramienta de investigación de keywords preferida y exportar todas y cada una de las keywords para las que se clasifica un lugar.
La meta aquí es exportar todas y cada una de las keywords para las que se clasifica un lugar, descartando las keywords de marca y cualquier cosa que se haya habilitado como link de ubicación o imagen.
Para este caso, estoy empleando el informe de keywords orgánicas en Ahrefs, pero va a funcionar igualmente bien con Semrush si esa es su herramienta preferida.
En Ahrefs, ingresa el dominio que quieres registrar Explorador de sitios y escoge Keywords orgánicas.

Site Explorer> Keywords orgánicas

Esto mostrará todas y cada una de las keywords para las que está clasificado el ubicación.
Filtrado de links de ubicación y links de imagen
El próximo paso es filtrar las keywords activadas, como links de ubicación o packs de imágenes.
La razón por la cual requerimos filtrar los links de ubicación es que no tienen predominación en la clasificación de las dirección de Internet primordiales. Esto se origina por que solo la página primordial está clasificada técnicamente para la keyword, no las dirección de Internet de link de ubicación que se detallan debajo.
Filtrar los links de lugar garantizará que se optimice la página adecuada.

Aquí se enseña de qué manera llevarlo a cabo en Ahrefs.

Por último, te invito a que filtres las keywords de tu marca. Puede llevarlo a cabo filtrando de manera directa el resultado CSV o filtrando antes en la herramienta de keywords de su decisión antes de exportar.
Por último, en el momento en que exporte, asegúrese de escoger Exportación completa Y UTF-8 formato como se expone ahora.

De manera ya establecida, el script marcha con exportaciones de keywords Ahrefs (v1 / v2) y Semrush. Puede marchar con cualquier fichero CSV de keyword siempre y cuando estén presentes los nombres de columna aguardados del script.
bajo procesamiento
Las próximas normas son para realizar una hoja de Google plus Colaboratory para realizar el código.
En este momento existe una alternativa mucho más fácil para los que lo prefieran con apariencia de Petición simplificada. Sencillamente prosiga las normas provistas para cargar el fichero con el rastreador y las keywords.
En este momento que hemos exportado nuestros ficheros, todo cuanto debemos realizar es subirlos a Hoja de colaboración de Google plus para procesar.
Para elegir Tiempo de ejecución> Realizar todo desde la navegación en la parte de arriba para realizar todas y cada una de las celdas de el papel.

El script le solicitará que cargue primero la keyword CSV de Ahrefs o Semrush, entonces el fichero de escaneo.

¡Eso es todo! El script descargará de manera automática un fichero CSV disponible que puede emplear para mejorar su lugar.

Cuando esté familiarizado con todo el desarrollo, utilizar el script es muy sencilla.
Desglose y explicación del código.
Si está aprendiendo Python SEO y está entusiasmado en lo que hace el código para generar el informe, ¡esté atento a la presentación del código!
Disponer bibliotecas
Instalamos el panda para realizar rodar la bola.
!pip install pandas
Importar módulos
Entonces requerimos importar los módulos precisos.
import pandas as pd from pandas import DataFrame, Series from typing import Union from google plus.colab import archivos
Detallar las cambiantes
En este momento es el instante de detallar las cambiantes.
El script considera todas y cada una de las keywords entre las situaciones 4 y 20 libres.
Modificar las cambiantes aquí le dejará determinar su rango si lo quiere. Merece la pena presenciar con la configuración para conseguir el más destacable resultado viable para sus pretensiones.
# equipo all cambiantes here min_volume = 10 # equipo the minimum search volume min_position = 4 # equipo the minimum position / default = 4 max_position = 20 # equipo the maximum position / default = 20 drop_all_true = True # If all checks (h1/title/copy) are true, remove the recommendation (Nothing to do) pagination_filters = "filterby|page|p=" # filter patterns used to detect and drop paginated pages
Cargue el fichero CSV de exportación con keywords
El próximo paso es leer la lista de keywords en el fichero CSV.
Está configurado para admitir un informe de Ahrefs (V1 y V2) y una exportación de Semrush.
Este código se lee en el fichero CSV en un Pandas DataFrame.
upload = archivos.upload() upload = list(upload.keys())[0] df_keywords = pd.read_csv( (upload), error_bad_lines=False, low_memory=False, encoding="utf8", dtype=, ) print("Uploaded Keyword CSV Archivo Successfully!")
Si todo salió según lo premeditado, va a ver una perspectiva del DataFrame desarrollado por la keyword CSV Export.

Cargue el fichero CSV de exportación de escaneo
Cuando se han importado las keywords, es hora de cargar el fichero de ingreso para escanear.
This fairly fácil piece of code reads in the crawl with some fallo handling option and creates a Pandas DataFrame named df_crawl. upload = archivos.upload() upload = list(upload.keys())[0] df_crawl = pd.read_csv( (upload), error_bad_lines=False, low_memory=False, encoding="utf8", dtype="str", ) print("Uploaded Crawl Dataframe Successfully!")
En el momento en que el fichero CSV haya terminado de cargarse, va a ver una perspectiva del DataFrame.

Limpie y estandarice sus datos de keywords
El próximo paso es cambiar el nombre de las columnas para asegurar la estandarización entre los modelos de exportación de ficheros más habituales.
Esencialmente, ponemos en buen estado la keyword DataFrame y la filtramos utilizando los límites establecidos por las cambiantes.
df_keywords.rename( columns=, inplace=True, ) # keep only the following columns from the keyword dataframe cols = "dirección de Internet", "Keyword", "Volume", "Position" df_keywords = df_keywords.reindex(columns=cols) try: # clean the data. (v1 of the ahrefs keyword export combines strings and ints in the volume column) df_keywords["Volume"] = df_keywords["Volume"].str.replace("0-10", "0") except AttributeError: pass # clean the keyword data df_keywords = df_keywords[df_keywords["URL"].notna()] # remove any missing values df_keywords = df_keywords[df_keywords["Volume"].notna()] # remove any missing values df_keywords = df_keywords.astype() # change data type to int df_keywords = df_keywords.sort_values(by="Volume", ascending=False) # sort by highest vol to keep the top opportunity # make new dataframe to merge search volume back in later df_keyword_vol = df_keywords[["Keyword", "Volume"]] # drop rows if minimum search volume doesn't match specified criteria df_keywords.loc[df_keywords["Volume"] < min_volume, "Volume_Too_Low"] = "drop" df_keywords = df_keywords[~df_keywords["Volume_Too_Low"].isin(["drop"])] # drop rows if minimum search position doesn't match specified criteria df_keywords.loc[df_keywords["Position"] <= min_position, "Position_Too_High"] = "drop" df_keywords = df_keywords[~df_keywords["Position_Too_High"].isin(["drop"])] # drop rows if maximum search position doesn't match specified criteria df_keywords.loc[df_keywords["Position"] >= max_position, "Position_Too_Low"] = "drop" df_keywords = df_keywords[~df_keywords["Position_Too_Low"].isin(["drop"])]
Limpie y estandarice sus datos de comienzo de sesión rastreando
Ahora, debemos adecentar y estandarizar nuestros principios de sesión de rastreo.
Esencialmente, solo empleamos la reindexación para sostener las columnas «Dirección», «Indexabilidad», «Título de la página», «H1-1» y «Copia 1», descartando el resto.
Utilizamos la columna «Indexabilidad» a mano para sostener solo las filas que son indexables. Esto suprimirá las dirección de Internet preceptivas, los redireccionamientos, etcétera. Sugiero activar esta alternativa al escanear.
Por último, estandarizamos los nombres de las columnas a fin de que sea un tanto mucho más satisfactorio trabajar con ellas.
# keep only the following columns from the crawl dataframe cols = "Address", "Indexability", "Title 1", "H1-1", "Copy 1" df_crawl = df_crawl.reindex(columns=cols) # drop non-indexable rows df_crawl = df_crawl[~df_crawl["Indexability"].isin(["Non-Indexable"])] # standardise the column names df_crawl.rename(columns=, inplace=True) df_crawl.head()
Asocia tus keywords
Conforme nos aproximamos al resultado final, debemos agrupar nuestras keywords para calcular la posibilidad total para cada página.
Aquí, calculamos cuántas keywords están en una distancia triunfadora para cada página, adjuntado con el volumen de búsqueda mezclado.
# groups the URLs (remove the dupes and combines stats) # make a copy of the palabras clave dataframe for grouping - this ensures stats perro be merged back in later from the OG df df_keywords_group = df_keywords.copy() df_keywords_group["KWs in Striking Dist."] = 1 # used to count the number of palabras clave in striking distance df_keywords_group = ( df_keywords_group.groupby("dirección de Internet") .agg() .reset_index() ) df_keywords_group.head()

Una vez completado, va a ver una perspectiva de la Marco de datos.
Vea sus keywords en líneas lindantes
Usamos los datos organizados como base para el resultado final. Utilizamos Pandas.unstack para remodelar el DataFrame para enseñar keywords al estilo de una exportación de GrepWords.

# create a new df, mezcle the merged data with the original data. display in adjacent rows ala grepwords df_merged_all_kws = df_keywords_group.merge( df_keywords.groupby("dirección de Internet")["Keyword"] .apply(lambda x: x.reset_index(drop=True)) .unstack() .reset_index() ) # sort by biggest opportunity df_merged_all_kws = df_merged_all_kws.sort_values( by="KWs in Striking Dist.", ascending=False ) # reindex the columns to keep just the top five palabras clave cols = "dirección de Internet", "Volume", "KWs in Striking Dist.", 0, 1, 2, 3, 4 df_merged_all_kws = df_merged_all_kws.reindex(columns=cols) # create union and rename the columns df_striking: Union[Series, DataFrame, None] = df_merged_all_kws.rename( columns= ) # merges striking distance df with crawl df to merge in the title, h1 and category description df_striking = pd.merge(df_striking, df_crawl, on="dirección de Internet", how="inner")
Detallar el orden final de las columnas y también insertar columnas de remplazo
Al final, establezcamos el orden final de las columnas y combinemos los datos iniciales de keywords.
¡Existen muchas columnas para organizar y hacer!
# equipo the final column order and merge the keyword data in cols = [ "URL", "Title", "H1", "Copy", "Striking Dist. Vol", "KWs in Striking Dist.", "KW1", "KW1 Vol", "KW1 in Title", "KW1 in H1", "KW1 in Copy", "KW2", "KW2 Vol", "KW2 in Title", "KW2 in H1", "KW2 in Copy", "KW3", "KW3 Vol", "KW3 in Title", "KW3 in H1", "KW3 in Copy", "KW4", "KW4 Vol", "KW4 in Title", "KW4 in H1", "KW4 in Copy", "KW5", "KW5 Vol", "KW5 in Title", "KW5 in H1", "KW5 in Copy", ] # re-index the columns to place them in a logical order + inserts new blank columns for kw checks. df_striking = df_striking.reindex(columns=cols)
Conjuntar los datos de keywords para cada columna
Este código fusiona los datos de volumen de keywords en el DataFrame. Es aproximadamente el semejante de una función BUSCARV de Excel.
# merge in keyword data for each keyword column (KW1 - KW5) df_striking = pd.merge(df_striking, df_keyword_vol, left_on="KW1", right_on="Keyword", how="left") df_striking['KW1 Vol'] = df_striking['Volume'] df_striking.drop(['Keyword', 'Volume'], axis=1, inplace=True) df_striking = pd.merge(df_striking, df_keyword_vol, left_on="KW2", right_on="Keyword", how="left") df_striking['KW2 Vol'] = df_striking['Volume'] df_striking.drop(['Keyword', 'Volume'], axis=1, inplace=True) df_striking = pd.merge(df_striking, df_keyword_vol, left_on="KW3", right_on="Keyword", how="left") df_striking['KW3 Vol'] = df_striking['Volume'] df_striking.drop(['Keyword', 'Volume'], axis=1, inplace=True) df_striking = pd.merge(df_striking, df_keyword_vol, left_on="KW4", right_on="Keyword", how="left") df_striking['KW4 Vol'] = df_striking['Volume'] df_striking.drop(['Keyword', 'Volume'], axis=1, inplace=True) df_striking = pd.merge(df_striking, df_keyword_vol, left_on="KW5", right_on="Keyword", how="left") df_striking['KW5 Vol'] = df_striking['Volume'] df_striking.drop(['Keyword', 'Volume'], axis=1, inplace=True)
Limpie mucho más sus datos
Los datos necesitan una limpieza agregada para llenar los valores vacíos (NaN) como cadenas vacías. Esto optimización la legibilidad del resultado final al hacer celdas en blanco, en vez de celdas con valores de cadena NaN.
Entonces transformamos las columnas a minúsculas a fin de que coincidan en el momento en que verificamos si una keyword de destino se expone en una columna cierta.
# replace nan values with empty strings df_striking = df_striking.fillna("") # drop the title, h1 and category description to lower case so kws perro be matched to them df_striking["Title"] = df_striking["Title"].str.lower() df_striking["H1"] = df_striking["H1"].str.lower() df_striking["Copy"] = df_striking["Copy"].str.lower()
Verifica si la keyword hace aparición en el título / H1 / Copiar y devuelve verdadero o falso
Este código corrobora si la keyword de destino está en el título de la página / H1 o en la copia.
Señalará verdadero o falso, en dependencia de si se halló una keyword en los elementos de la página.
df_striking["KW1 in Title"] = df_striking.apply(lambda row: row["KW1"] in row["Title"], axis=1) df_striking["KW1 in H1"] = df_striking.apply(lambda row: row["KW1"] in row["H1"], axis=1) df_striking["KW1 in Copy"] = df_striking.apply(lambda row: row["KW1"] in row["Copy"], axis=1) df_striking["KW2 in Title"] = df_striking.apply(lambda row: row["KW2"] in row["Title"], axis=1) df_striking["KW2 in H1"] = df_striking.apply(lambda row: row["KW2"] in row["H1"], axis=1) df_striking["KW2 in Copy"] = df_striking.apply(lambda row: row["KW2"] in row["Copy"], axis=1) df_striking["KW3 in Title"] = df_striking.apply(lambda row: row["KW3"] in row["Title"], axis=1) df_striking["KW3 in H1"] = df_striking.apply(lambda row: row["KW3"] in row["H1"], axis=1) df_striking["KW3 in Copy"] = df_striking.apply(lambda row: row["KW3"] in row["Copy"], axis=1) df_striking["KW4 in Title"] = df_striking.apply(lambda row: row["KW4"] in row["Title"], axis=1) df_striking["KW4 in H1"] = df_striking.apply(lambda row: row["KW4"] in row["H1"], axis=1) df_striking["KW4 in Copy"] = df_striking.apply(lambda row: row["KW4"] in row["Copy"], axis=1) df_striking["KW5 in Title"] = df_striking.apply(lambda row: row["KW5"] in row["Title"], axis=1) df_striking["KW5 in H1"] = df_striking.apply(lambda row: row["KW5"] in row["H1"], axis=1) df_striking["KW5 in Copy"] = df_striking.apply(lambda row: row["KW5"] in row["Copy"], axis=1)
Remover valores verdadero/falso si no hay keywords
Esto borrará los valores verdadero/falso en el momento en que no haya keywords lindantes.
# delete true / false values if there is no keyword df_striking.loc[df_striking["KW1"] == "", ["KW1 in Title", "KW1 in H1", "KW1 in Copy"]] = "" df_striking.loc[df_striking["KW2"] == "", ["KW2 in Title", "KW2 in H1", "KW2 in Copy"]] = "" df_striking.loc[df_striking["KW3"] == "", ["KW3 in Title", "KW3 in H1", "KW3 in Copy"]] = "" df_striking.loc[df_striking["KW4"] == "", ["KW4 in Title", "KW4 in H1", "KW4 in Copy"]] = "" df_striking.loc[df_striking["KW5"] == "", ["KW5 in Title", "KW5 in H1", "KW5 in Copy"]] = "" df_striking.head()
Remover líneas si todos y cada uno de los valores == Verdadero
Esta alternativa configurable es verdaderamente útil para achicar la proporción de tiempo de control de calidad requerido para el entregable al remover la keyword de ocasión del entregable si está en las tres columnas.
def true_dropper(col1, col2, col3): drop = df_striking.drop( df_striking[ (df_striking[col1] == True) & (df_striking[col2] == True) & (df_striking[col3] == True) ].index ) return drop if drop_all_true == True: df_striking = true_dropper("KW1 in Title", "KW1 in H1", "KW1 in Copy") df_striking = true_dropper("KW2 in Title", "KW2 in H1", "KW2 in Copy") df_striking = true_dropper("KW3 in Title", "KW3 in H1", "KW3 in Copy") df_striking = true_dropper("KW4 in Title", "KW4 in H1", "KW4 in Copy") df_striking = true_dropper("KW5 in Title", "KW5 in H1", "KW5 in Copy")
Descarga el fichero CSV
El último paso es bajar el fichero CSV y también comenzar el desarrollo de optimización.
df_striking.to_csv('Palabras clave in Striking Distance.csv', index=False) archivos.download("Palabras clave in Striking Distance.csv")
Conclusión
Si busca ganancias veloces para cualquier página web, el increíble informe de distancia es una manera verdaderamente simple de hallarlas.
No se deje mentir por la proporción de pasos. No es tan complejo como semeja. Es tan fácil como escanear y exportar keywords en el papel de Google plus Colab proveída o utilizar la app Streamlit.
¡Los desenlaces terminantemente merecen la pena!
Mucho más elementos:
Imagen mostrada: aurielaki / Shutterstock
Fuente: searchenginejournal
Hashtags: #Utilizando #Python #Streamlit #para #conseguir #pasmantes #ocasiones #expresiones #clave #recónditas
Comentarios recientes