🔵

GEO con WordPress: Guía completa de implementación

beginner

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 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