GEO con WordPress: Guía completa de implementación
beginnerWordPress implementa GEO con Yoast SEO Premium o RankMath Pro (opción no-code) o con código personalizado en functions.php (opción de desarrollador). Añade meta tags Open Graph con article:published_time, schema JSON-LD Article, y configura robots.txt para permitir los 8 crawlers de IA. WordPress genera HTML estático nativo para crawlers.
GEO con WordPress: Guía completa de implementación
WordPress implementa GEO con Yoast SEO Premium o RankMath Pro (opción no-code) o con código personalizado en functions.php (opción de desarrollador). Añade meta tags Open Graph con article:published_time, schema JSON-LD Article, y configura robots.txt para permitir los 8 crawlers de IA.
WordPress genera HTML server-rendered por defecto, lo que lo hace nativamente compatible con los crawlers de IA. El trabajo principal de GEO es la configuración de plugins y robots.txt.
Opción 1: Código personalizado en functions.php
// functions.php
// 1. Meta tags + Open Graph completos
function geo_meta_tags() {
if (!is_singular()) return;
$published = get_the_date('c');
$modified = get_the_modified_date('c');
$url = get_permalink();
$desc = get_the_excerpt() ?: get_bloginfo('description');
$image = get_the_post_thumbnail_url(null, 'large');
echo '<meta property="og:type" content="article">' . "\n";
echo '<meta property="og:title" content="' . esc_attr(get_the_title()) . '">' . "\n";
echo '<meta property="og:description" content="' . esc_attr($desc) . '">' . "\n";
echo '<meta property="og:url" content="' . esc_url($url) . '">' . "\n";
echo '<meta property="og:site_name" content="' . esc_attr(get_bloginfo('name')) . '">' . "\n";
echo '<meta property="og:locale" content="' . esc_attr(get_locale()) . '">' . "\n";
if ($image) echo '<meta property="og:image" content="' . esc_url($image) . '">' . "\n";
echo '<meta property="article:published_time" content="' . esc_attr($published) . '">' . "\n";
echo '<meta property="article:modified_time" content="' . esc_attr($modified) . '">' . "\n";
echo '<meta property="article:author" content="' . esc_url(get_author_posts_url(get_the_author_meta('ID'))) . '">' . "\n";
echo '<link rel="canonical" href="' . esc_url($url) . '">' . "\n";
}
add_action('wp_head', 'geo_meta_tags', 5);
// 2. JSON-LD Schema
function geo_json_ld() {
if (!is_singular()) return;
$schema = [
'@context' => 'https://schema.org',
'@type' => 'Article',
'headline' => get_the_title(),
'description' => get_the_excerpt(),
'author' => ['@type' => 'Person', 'name' => get_the_author()],
'publisher' => [
'@type' => 'Organization',
'name' => get_bloginfo('name'),
'logo' => ['@type' => 'ImageObject', 'url' => get_site_icon_url()],
],
'datePublished' => get_the_date('c'),
'dateModified' => get_the_modified_date('c'),
'mainEntityOfPage' => ['@type' => 'WebPage', '@id' => get_permalink()],
];
$thumbnail = get_the_post_thumbnail_url(null, 'large');
if ($thumbnail) $schema['image'] = $thumbnail;
echo '<script type="application/ld+json">' . wp_json_encode($schema) . '</script>' . "\n";
}
add_action('wp_head', 'geo_json_ld');
// 3. Permitir crawlers de IA en wp_robots
function geo_allow_ai_crawlers($robots) {
// WordPress 5.7+ gestiona robots programáticamente
// Este hook asegura que los crawlers de IA no sean bloqueados
return $robots;
}
add_filter('wp_robots', 'geo_allow_ai_crawlers');
robots.txt en WordPress
WordPress genera automáticamente un robots.txt virtual. Para personalizarlo:
// functions.php — personalizar robots.txt
function geo_robots_txt($output, $public) {
$output .= "\n# AI Crawlers — requerido para GEO\n";
$output .= "User-agent: GPTBot\nAllow: /\n\n";
$output .= "User-agent: OAI-SearchBot\nAllow: /\n\n";
$output .= "User-agent: ClaudeBot\nAllow: /\n\n";
$output .= "User-agent: Claude-User\nAllow: /\n\n";
$output .= "User-agent: Claude-SearchBot\nAllow: /\n\n";
$output .= "User-agent: PerplexityBot\nAllow: /\n\n";
$output .= "User-agent: Google-Extended\nAllow: /\n\n";
$output .= "User-agent: BingBot\nAllow: /\n\n";
return $output;
}
add_filter('robots_txt', 'geo_robots_txt', 10, 2);
Verifica el resultado en: https://tudominio.com/robots.txt
llms.txt como página personalizada
Crea un endpoint /llms.txt con un template personalizado:
// functions.php — crear endpoint llms.txt
function geo_llms_txt_endpoint() {
add_rewrite_rule('^llms\.txt$', 'index.php?geo_llms_txt=1', 'top');
}
add_action('init', 'geo_llms_txt_endpoint');
function geo_llms_txt_query_var($vars) {
$vars[] = 'geo_llms_txt';
return $vars;
}
add_filter('query_vars', 'geo_llms_txt_query_var');
function geo_llms_txt_template() {
if (get_query_var('geo_llms_txt')) {
header('Content-Type: text/plain; charset=utf-8');
$site_name = get_bloginfo('name');
$site_desc = get_bloginfo('description');
echo "# {$site_name}\n";
echo "> {$site_desc}\n\n";
echo "## Contenido principal\n";
$posts = get_posts(['numberposts' => 20, 'post_status' => 'publish']);
foreach ($posts as $post) {
$excerpt = wp_trim_words($post->post_excerpt ?: $post->post_content, 20);
echo "- [{$post->post_title}](" . get_permalink($post) . "): {$excerpt}\n";
}
echo "\n## Páginas\n";
$pages = get_pages(['sort_column' => 'menu_order']);
foreach ($pages as $page) {
echo "- [{$page->post_title}](" . get_permalink($page) . ")\n";
}
exit;
}
}
add_action('template_redirect', 'geo_llms_txt_template');
No olvides ir a Ajustes → Permalinks → Guardar cambios para recargar las rewrite rules.
Opción 2: Plugins (opción no-code)
Alternativa sin código: Yoast SEO Premium o RankMath Pro generan todo esto automáticamente con soporte GEO nativo en 2026.
Yoast SEO Premium:
- Activa Open Graph en SEO → Social → Facebook
- Habilita Schema markup en SEO → Configuración del sitio → Tipos de contenido
- article:published_time y article:modified_time se añaden automáticamente
RankMath Pro:
- Activa “Rich Snippets” en RankMath → Configuración general → Rich Snippets
- Habilita Article schema para todos los posts
- Configura Open Graph en RankMath → Social Media
Checklist GEO para WordPress
- Meta tags Open Graph con og:type=article
- article:published_time y article:modified_time en todos los posts
- JSON-LD Article schema con publisher y fechas
- Canonical URL en cada página/post
- robots.txt personalizado con los 8 crawlers de IA permitidos
- llms.txt creado como endpoint personalizado o página estática
- Plugin SEO configurado (Yoast Premium o RankMath Pro) si prefieres no-code
- Sitemap XML con lastmod (generado automáticamente por Yoast o plugins de sitemap)
- Estructura de contenido en pirámide invertida
- Core Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1