Saltar al contenido
Herramienta básica1 credit

extract_metadata

Extraiga metadatos completos de páginas, incluyendo título, descripción, etiquetas OpenGraph, datos de Twitter Card e información SEO.

Casos de uso

Análisis SEO

Analice títulos, descripciones y palabras clave de las páginas para optimizarlas

Datos de vista previa para redes sociales

Obtenga datos de OpenGraph y Twitter Card para vistas previas enriquecidas en redes sociales

Categorización de contenido

Use los metadatos para clasificar y organizar el contenido web

Generación de vistas previas de enlaces

Cree vistas previas de enlaces enriquecidas con títulos, imágenes y descripciones

Endpoint

POST/api/v1/tools/extract_metadata
Auth Required
1 req/s en el plan Free
1 credit

Parameters

NameTypeRequiredDefaultDescription
url
stringOptional-
Página de la que se extraerán los metadatos. Se requiere `url` o `html`.
Example: https://example.com/article
html
stringOptional-
HTML sin procesar que se analizará en lugar de descargar.
Example: <html>...</html>
include_social
booleanOptionaltrue
Incluye Open Graph, tarjetas de Twitter, el id de app de Facebook y las etiquetas de verificación del sitio.
Example: true
include_seo
booleanOptionaltrue
Incluye description, keywords, author, robots, canonical, encabezados y viewport.
Example: true
include_technical
booleanOptionaltrue
Incluye generator, favicons, hojas de estilo y scripts.
Example: true
include_structured_data
booleanOptionaltrue
Incluye los bloques de datos estructurados JSON-LD encontrados en la página.
Example: true
respect_robots
booleanOptionaltrue
Respeta el robots.txt del sitio de destino. Con el valor `true`, una ruta que robots.txt no permita a `CrawlForge` se rechaza con un 403 antes de descargar nada y no se cobran credits. Póngalo en `false` solo para destinos con los que tenga su propio acuerdo: la respuesta incluye entonces una entrada `warnings` y la anulación queda registrada en su API key.
Example: true
max_inline_chars
numberOptional40000
Tamaño máximo del resultado que se devuelve en línea, en caracteres de su JSON (de 1.000 a 10.000.000). Por encima, la respuesta incluye `preview` (los primeros `max_inline_chars` caracteres del JSON formateado), `result_handle`, `total_chars`, `truncated: true` y `expires_at`, y [read_result](/docs/api-reference/tools/read-result) lee el resto por 1 credit por llamada. Los resultados almacenados se conservan 1 hora.
Example: 40000

Ejemplos de solicitud

cURL

terminalBash
curl -X POST https://crawlforge.dev/api/v1/tools/extract_metadata \
  -H "X-API-Key: cf_test_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/article"}'

TypeScript

extractMetadata.tsTypescript
// npm install crawlforge-sdk
import { CrawlForge } from 'crawlforge-sdk';

const client = new CrawlForge({ apiKey: process.env.CRAWLFORGE_API_KEY });

const result = await client.extractMetadata({
  url: 'https://example.com/article',
});

// result.data is untyped in crawlforge-sdk 0.1 — its shape is the Response Example below.
const { metadata } = result.data as {
  metadata: {
    basic: { title: string };
    seo: { description: string };
    social: { open_graph: { image?: string } | null; twitter: { card?: string } | null };
  };
};
console.log('Title:', metadata.basic.title);
console.log('Description:', metadata.seo.description);
// open_graph and twitter are null when the page declares no such tags.
console.log('OG Image:', metadata.social.open_graph?.image);
console.log('Twitter Card:', metadata.social.twitter?.card);

Python

extract_metadata.pyPython
# pip install crawlforge
from crawlforge import CrawlForge

client = CrawlForge()  # reads CRAWLFORGE_API_KEY

result = client.extract_metadata(
    url='https://example.com/article',
)

# result.data is a plain dict — its shape is the Response Example below.
metadata = result.data['metadata']
print(f"Title: {metadata['basic']['title']}")
print(f"Description: {metadata['seo']['description']}")
# open_graph and twitter are None when the page declares no such tags.
open_graph = metadata['social']['open_graph'] or {}
twitter = metadata['social']['twitter'] or {}
print(f"OG Image: {open_graph.get('image')}")
print(f"Twitter Card: {twitter.get('card')}")

Ejemplo de respuesta

200 OK195ms
{
"success": true,
"data": {
"metadata": {
"basic": {
"title": "Example Article - Best Practices Guide",
"url": "https://example.com/article",
"lang": "en",
"charset": "utf-8"
},
"seo": {
"description": "Learn the best practices for web development",
"keywords": "web development, best practices, tutorial",
"author": "Jane Doe",
"robots": "index, follow",
"canonical": "https://example.com/article",
"headings": {
"h1": [
"Best Practices Guide"
],
"h2": [
"Getting Started",
"Common Pitfalls"
],
"h3": []
},
"meta_refresh": null,
"viewport": "width=device-width, initial-scale=1"
},
"social": {
"open_graph": {
"title": "Example Article - Best Practices Guide",
"image": "https://example.com/og-image.jpg",
"type": "article",
"site_name": "Example Site"
},
"twitter": {
"card": "summary_large_image",
"site": "@examplesite"
},
"facebook_app_id": null,
"google_site_verification": null
},
"technical": {
"generator": "Next.js",
"favicons": [
{
"rel": "icon",
"href": "/favicon.ico",
"type": "image/x-icon"
}
]
},
"structured_data": []
},
"summary": {
"has_title": true,
"has_description": true,
"has_open_graph": true,
"has_twitter_cards": true,
"has_structured_data": false,
"total_headings": 3
},
"extracted_from": "https://example.com/article",
"redirected": false,
"extraction_time": "2026-08-26T14:30:00.000Z"
},
"credits_used": 1,
"credits_remaining": 999,
"processing_time": 195
}
Field Descriptions
data.metadata.basicSiempre presente: título, url resuelta, lang del html y charset.
data.metadata.seoPresente cuando `include_seo` es true. Incluye la estructura completa de encabezados h1/h2/h3.
data.metadata.social.open_graphTodas las propiedades `og:` que declara la página, tal cual. Null cuando la página no tiene ninguna.
data.metadata.social.twitterTodas las propiedades `twitter:` que declara la página. Null cuando no hay ninguna.
data.metadata.technicalPresente cuando `include_technical` es true: generator, favicons, hojas de estilo y scripts.
data.metadata.structured_dataBloques JSON-LD encontrados en la página. Arreglo vacío cuando no hay ninguno.
data.summaryBooleanos para una comprobación rápida de completitud sin recorrer todo el objeto metadata.
data.extracted_fromLa URL de origen (la URL final tras cualquier redirección), o la cadena literal 'provided HTML' cuando pasaste `html`.
data.redirectedSiempre presente. `true` cuando la descarga terminó en una URL distinta de la que enviaste, comparadas tras analizarlas, así que `https://example.com` y `https://example.com/` son la misma página. Los metadatos describen entonces la página de destino, y `data.requested_url` lleva la URL que enviaste. Siempre `false` con `html`.
data.extraction_timeMarca de tiempo ISO 8601 de la extracción.

Manejo de errores

Bloqueado por robots.txt (403 Forbidden)

El robots.txt del sitio de destino no permite esta ruta a CrawlForge. Establezca respect_robots: false para anularlo si tiene su propio acuerdo con el destino: la anulación queda registrada en su API key. La anulación no alcanza a un host incluido en la lista de exclusión permanente de CrawlForge, que se rechaza sea cual sea el valor de respect_robots.

Herramientas relacionadas