Cómo automatizar el seguimiento de clasificación en la hoja de cálculo con Semrush [SIN USAR LA API]

Criterio Técnico · Sin Humo de Agencia Por Ismael Laredo · 20 años en SEO, Web e IA

En Una Aguja en un Pajar no escribimos artículos para rellenar un calendario ni para venderte servicios que no necesitas. Aquí tienes lo que funciona de verdad en la trinchera cuando el objetivo no es coleccionar visitas, sino hacer que el teléfono de tu empresa suene.

Este artículo complementa el artículo de Semrush sobre la automatización del seguimiento de clasificación sin usar la API.

Si te ha gustado la idea, ¡compártela! para que llegue a muchas mas personas!

Aquí tendríamos el código del script correspondiente:

importCSVFromGmail () función
var threads = GmailApp.search (‘de: ”alberto@ingeniroseo.com” asunto: ”exportar cliente”’);
var mensaje = hilo[0].getMensajes ()[0];
var archivo adjunto = mensaje.getAttachments ()[0];
var nombre de archivo = mensaje.getAttachments ()[0].getNombre ();
if (archivo adjunto.getContentType () === «aplicación / zip»)
var csv = Utilities.unzip (adjunto);
var hoja = SpreadsheetApp.getActiveSheet ();
var csvData = Utilidades.parseCsv (csv[0].getDataAsString (), “,”);
leerDatos (csvData);

//mensaje.mover a la papelera ();

función readData (csvData)
var ss = SpreadsheetApp.getActive ();
// establecer la hoja que nos interesa
var hoja = ss.getSheetByName (‘RANGO’);
// lee las palabras clave que existen en la hoja
rango var = hoja.getRange (2,1, hoja.getLastRow () – 2);
var datos = range.getValues ​​​​();
// busca la última columna con fecha e inserta la siguiente 1
var column = parseInt (columnLastDate (hoja));
hoja.insertColumnAfter (columna);
// calcular la fecha de los nuevos datos
// var fecha = nueva Fecha (hoja.getRange (1, columna) .getValue ());
//fecha.establecerFecha(fecha.obtenerFecha()+7);
// fecha = fecha.obtenerFecha() + ‘/’ + (fecha.obtenerMes() + 1);

var newColumn = hoja.getRange (1, columna + 1);
var columna anterior = hoja.getRange (1, columna);
var última fila;
// Calculamos la fecha un día antes de la ejecución
var ahora = nueva fecha ();
var MILLIS_PER_DAY = 1000 * 60 * 60 * 24;
var ayer = nueva Fecha (ahora.getTime() – MILLIS_PER_DAY);
newColumn.setValue (ayer);
//nuevaColumna.establecerValor(datos);
newColumn.setFontColors (previousColumn.getFontColors ());
newColumn.setFontFamilies (previousColumn.getFontFamilies ());
newColumn.setFontWeights (previousColumn.getFontWeights ());
newColumn.setFontStyles (previousColumn.getFontStyles ());

para (var CSVRow = 1; CSVRow
var palabra clave = csvData[filaCSV][0].a minúsculas ();
si (palabra clave! = «)
var nuevaPosición = csvData[filaCSV][1];
var url = csvData[filaCSV][3];
var tráfico = (csvData[filaCSV][7] !=’n/d’)? csvData[filaCSV][7] : 5;

for (var filaKW = 0; filaKW
si (datos[filaKW][0].toLowerCase ().trim () == palabra clave.trim ())
hoja.getRange (rowKW + 2,2) .setValue (tráfico);
sheet.getRange (rowKW + 2, column + 1) .setValue (parseInt (newPosition) <100? newPosition: '101');
hoja.getRange (filaKW + 2, columna + 1) .setHorizontalAlignment («derecha»);
// diferencia desde el 1er dia
hoja.getRango (rowKW + 2, columna + 2) .setFormulaR1C1 («= R[0]C.[-“+(column-1)+”]-R[0]C.[-“+(column-(column-1))+”]»);
// diferencia con el dia anterior
hoja.getRango (rowKW + 2, columna + 3) .setFormulaR1C1 («= R[0]C.[-“+(column-(column-3))+”]-R[0]C.[-“+(column-(column-2))+”]»);
// URL anterior
hoja.getRange (filaKW + 2, columna + 5) .setValue (hoja.getRange (filaKW + 2, columna + 4) .getValore ());
// URL
hoja.getRange (rowKW + 2, columna + 4) .setValue (url);

}

// las palabras clave que no figuran en el archivo van a 101
for (i = 2; i <= hoja.getLastRow () - 2; + i ++)
if (hoja.getRange (i, columna + 1) .getValue () == «»)
if (hoja.getRange (i, 2) .getValue () == «)
hoja.getRange (i, 2) .setValue (5);

hoja.getRange (i, columna + 1) .setValue (101);
// diferencia desde el 1er dia
hoja.getRange (i, columna + 2) .setFormulaR1C1 (“= R[0]C.[-“+(column-1)+”]-R[0]C.[-“+(column-(column-1))+”]»);
// diferencia con el dia anterior
hoja.getRange (i, columna + 3) .setFormulaR1C1 (“= R[0]C.[-“+(column-(column-3))+”]-R[0]C.[-“+(column-(column-2))+”]»);
// URL anterior
hoja.getRange (i, columna + 5) .setValue (hoja.getRange (i, columna + 4) .getValue ());
// URL
hoja.getRange (i, columna + 4) .setValue (“”);

// posición promedio del día
hoja.getRange (hoja.getLastRow (), columna + 1) .setFormulaR1C1 («= SUMA (R[-“+(sheet.getLastRow()-2)+”]C.[0]: R[-“+(sheet.getLastRow()-(sheet.getLastRow()-2))+”]C.[0]) / «+ (Hoja.getLastRow () – 3));
// diferencia porcentual del 1er día
hoja.getRange (hoja.getLastRow (), columna + 2) .setFormulaR1C1 («= (R[0]C.[-“+(column-1)+”]-R[0]C.[-1]) / R[0]C.[-1]»);
// diferencia porcentual el dia anterior
hoja.getRange (hoja.getLastRow (), columna + 3) .setFormulaR1C1 («= (R[0]C.[-3]-R[0]C.[-2]) / R[0]C.[-2]»);

// formato condicional de la escala de colores
colorScale (hoja, columna);

hoja.autoResizeColumn (columna + 1);
}

función columnaÚltimaFecha (hoja)
para (var columna = 1; columna
if (hoja.getRange (1, columna) .getValue () == ‘Diferencia día 1’)
volver parseInt (columna-1);

}

función de escala de color (hoja, columna)
regla = SpreadsheetApp.newConditionalFormatRule ()
.setGradientMaxpointWithValue («# e67c73 ″, SpreadsheetApp.InterpolationType.MAX,» «)
.setGradientMidpointWithValue («# ffd666 ″, SpreadsheetApp.InterpolationType.PERCENTILE,» 50 «)
.setGradientMinpointWithValue («# 57bb8a», SpreadsheetApp.InterpolationType.MIN, «»)
.setRango ([sheet.getRange(2,3,sheet.getLastRow()-3,column-1)])
.para construir();
var reglas = hoja.getConditionalFormatRules ();
reglas.longitud = 0;
reglas.push (regla);
sheet.setConditionalFormatRules (reglas);