Web Scraping para SEO con Cheerio en Node.js

¿Qué es web scraping? En SEO, el análisis de datos de la competencia, técnicas de recopilar información y el web scraping son partes fundamentales para generar nuestra estrategia. Una de las técnicas más usadas para sacar la base de datos de una página web es, efectivamente, el web scraping. Por un tiempo, Python se ha convertido en tendencia y trafilatura o beautiful Soup son dos de las librerías más usadas. Pero, ¿cómo hacer web scraping para SEO en JavaScript, específicamente con Node.js y Cheerio?

Una de mis librerías favoritas para el web scraping con JavaScript es Cheerio, es un clásico, pero viejos rockeros nunca mueren. Vamos a ver cómo hacer scraping de una página web con Cheerio y Node.js.

Primero, antes de comenzar a analizar el código HTML de una página para obtener los datos de nuestro interés, necesitamos instalar Cheerio en nuestro entorno de Node.js. Cheerio es una biblioteca de JavaScript del lado del servidor que proporciona una forma rápida, flexible y eficiente de analizar, manipular y renderizar contenido web. Es una de las mejores web scraping tools disponibles.

Instalación de Cheerio

Para instalar Cheerio, debemos tener un entorno Node.js configurado. Una vez que esto está listo, podemos instalar Cheerio utilizando el administrador de paquetes de Node (npm) con el siguiente comando en la terminal:

npm install cheerio

Ahora que tenemos Cheerio instalado, podemos comenzar a realizar solicitudes a la URL que deseamos analizar y extraer los datos SEO. Es un primer paso esencial para entender cómo hacer scraping de una página web..

Configurar Cheerio y Axios para web scraping

Para hacer solicitudes web en Node.js, podemos utilizar la biblioteca axios. Esta biblioteca nos permite hacer solicitudes HTTP desde node.js. Para instalar axios, simplemente necesitamos ejecutar el siguiente comando:

npm install axios

Una vez que tenemos axios y cheerio instalados, podemos hacer una solicitud a una URL y cargar la respuesta en Cheerio para su posterior análisis. Es la base para aprender cómo hacer web scraping con JavaScript.

const axios = require('axios'); const cheerio = require('cheerio');  axios.get('<tu_url>').then(response => {   const $ = cheerio.load(response.data);   // Ahora podemos usar $ para seleccionar elementos como en jQuery });

Extracción de datos SEO

Con Cheerio, podemos extraer una gran cantidad de información SEO relevante de una página web. A continuación, se detallan algunas de las claves más comunes que se pueden utilizar para extraer información SEO.

Metatítulo

El metatítulo es uno de los metadatos más importantes desde el punto de vista del SEO, ya que se muestra en el fragmento de búsqueda y puede optimizarse para ciertas palabras clave. Podemos obtener el metatitle con el siguiente código:

let metatitle = $('title').text();

Metadescripción

Las metadescripciones se utilizan para explicar brevemente de qué trata tu página y también aparecerán en el fragmento de búsqueda. Podemos obtener la metadescripción con el siguiente código:

let metadescription = $('meta[name="description"]').attr('content'); 

Robots

La etiqueta meta robots es una etiqueta SEO muy importante, ya que especifica si la página puede ser indexada y proporciona algunas directivas sobre cómo se debe mostrar la página en los SERP. Podemos extraer las directivas de robots con el siguiente código:

let robotsDirectives = $('meta[name="robots"]').attr('content').split(',');

Charset

El meta charset indica a los motores de búsqueda la codificación de caracteres de la página. Es especialmente útil para las páginas que no están escritas en inglés y que podrían contener caracteres especiales no disponibles en inglés cuando se trabaja en SEO internacional.

Podemos encontrar el meta charset con este código:

let charset = $('meta[charset]').attr('charset');

Lenguaje HTML

El lenguaje HTML no es un meta en sí mismo, pero puede ser un elemento interesante cuando se trabaja en SEO internacional, ya que proporciona a los bots de los motores de búsqueda algunas pistas sobre a qué país está destinada la página.

Podemos obtener este elemento con la clave:

let htmlLanguage = $('html').attr('lang'); 

Extracción de Alternativas y Canónicos

Canónicos

El atributo rel="canonical" indica a Google cuál es la página que debería ser indexada. Se puede apuntar a sí misma en caso de que la propia página deba ser indexada, o a otra página si se debe indexar otra página en su lugar.

Los URLs canónicos se pueden obtener con esta clave:

let canonical = $('link[rel="canonical"]').attr('href'); 

Hreflangs

Los hreflangs son especialmente importantes cuando se tiene un sitio web con diferentes versiones de idioma para indicar a los motores de búsqueda qué versión debe ser indexada y mostrada en los SERP de cada país.

La clave que se necesita usar para extraer hreflangs es la siguiente y devolverá una lista con las páginas proporcionadas para cada idioma y sus códigos de país:

let hreflangs = []; $('link[hreflang]').each((index, element) => {   hreflangs.push([$(element).attr('href'), $(element).attr('hreflang')]); }); 

Extracción de Contenido

Párrafos

La clave que se muestra a continuación extraerá los textos de los párrafos (p) y devolverá una lista con todos los textos de los párrafos. Además, podemos calcular el número de caracteres de estos textos.

let paragraphs = []; $('p').each((index, element) => {   paragraphs.push($(element).text()); }); let textLength = paragraphs.join('').length;

Encabezados

Cheerio nos permite extraer un tipo específico de encabezados, digamos por ejemplo H1, pero también nos permite extraer diferentes tipos de etiquetas usando el método .each() e introduciendo una lista con todas las etiquetas que nos gustaría extraer.

let headers = []; $('h1, h2, h3, h4, h5, h6').each((index, element) => {   headers.push([$(element).prop('tagName'), $(element).text()]); });

Imágenes

Algo que podría ser interesante es extraer las URLs de las imágenes de una página para tener una idea de cuántas imágenes se están utilizando y sus textos alternativos para ver si están correctamente optimizadas.

Con este código podemos obtener todas las URLs de las imágenes de esa página y sus textos alternativos en formato de lista:

let images = []; $('img').each((index, element) => {   images.push({     src: $(element).attr('src'),     alt: $(element).attr('alt'),   }); }); 

Extracción de Enlaces

Los enlaces internos y externos en una página web también son componentes críticos para el SEO. Los enlaces internos ayudan a los motores de búsqueda a entender la estructura de tu sitio web, mientras que los enlaces externos pueden ayudar a mejorar la autoridad de tu sitio.

Para extraer todos los enlaces (a), podemos utilizar el siguiente código, que devuelve un objeto con el texto del enlace, la URL del enlace (href) y si el enlace es nofollow o no:

let links = []; $('a').each((index, element) => {   links.push({     text: $(element).text(),     href: $(element).attr('href'),     nofollow: $(element).attr('rel') === 'nofollow' ? true : false,   }); });

Conclusión

En resumen, Cheerio es una poderosa herramienta para realizar web scraping en Node.js, esencial en nuestro repertorio de técnicas de recopilar información. En combinación con Node.js y axios, permite extraer y analizar de manera eficiente una gran cantidad de datos SEO de una página web. Te permite analizar web gratis de forma ética y respetando las políticas de robots.txt de los sitios web.

¡Ahora que tienes las herramientas y sabes qué es web scraping y cómo hacer scraping de una página web, es hora de empezar a explorar el apasionante mundo del SEO con Node.js y Cheerio, una de las más potentes web scraping tools disponibles!

Preguntas Frecuentes

Web | + posts

Mi nombre es David. Soy SEO aunque gran parte de mi vida la he pasado haciendo fotos. Trabajo como Supply Manager en Growwer, sigo haciendo fotos y escribo en el blog fotografia2cero.com.

También te puede interesar