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
/api/v1/tools/extract_metadataParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Optional | - | Página de la que se extraerán los metadatos. Se requiere `url` o `html`. Example: https://example.com/article |
html | string | Optional | - | HTML sin procesar que se analizará en lugar de descargar. Example: <html>...</html> |
include_social | boolean | Optional | true | Incluye Open Graph, tarjetas de Twitter, el id de app de Facebook y las etiquetas de verificación del sitio. Example: true |
include_seo | boolean | Optional | true | Incluye description, keywords, author, robots, canonical, encabezados y viewport. Example: true |
include_technical | boolean | Optional | true | Incluye generator, favicons, hojas de estilo y scripts. Example: true |
include_structured_data | boolean | Optional | true | Incluye los bloques de datos estructurados JSON-LD encontrados en la página. Example: true |
respect_robots | boolean | Optional | true | 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 | number | Optional | 40000 | 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
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
// 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
# 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
{ "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}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
¿Listo para extraer metadatos? Regístrese gratis y obtenga 1,000 credits.