Agregar etiquetas <meta/> a la sección <head> a través de functions.php
Tengo un tema personalizado que he desarrollado y es básicamente un sitio web tipo folleto de 4 páginas para un cliente. He logrado prescindir de varios plugins desarrollando tipos de contenido personalizados, compresión gzip mediante .htaccess y minificación usando gulp, etc.
Mantendré el plugin de seguridad en el sitio, pero me gustaría eliminar Yoast, ya que el único beneficio que aporta, teniendo en cuenta lo optimizado que está el sitio, es que me permite agregar las etiquetas meta
y snippets para cada página con fines de SEO.
¿Existe alguna función que pueda agregar a mi archivo functions.php que me permita añadir etiquetas <meta>
a diferentes páginas según el ID de la página?
Cuando uno busca en Google sobre este tema, solo encuentra artículos sobre plugins o información general sobre meta en WordPress.
Cualquier ayuda sería fantástica.
Paul.
El hook que estás buscando es específicamente wp_head
que podría verse algo así:
function theme_xyz_header_metadata() {
// Objeto del post si es necesario
// global $post;
// Condicional de página si es necesario
// if( is_page() ){}
?>
<meta name="abc" content="xyz" />
<?php
}
add_action( 'wp_head', 'theme_xyz_header_metadata' );
Sin embargo, creo que a largo plazo, dado que WordPress es tan portable, Yoast SEO es probablemente la apuesta más confiable y flexible para SEO que algo que podrías hacer tú mismo, por lo que personalmente te recomendaría evitarlo.

SEO Hazlo Tú Mismo:
1: En el editor de entradas/páginas para una página o entrada: Añade campos personalizados (metadatos) con los valores requeridos para tus etiquetas meta de SEO.
- Por ejemplo, abre tu página "Términos y Condiciones" en el editor de páginas y
añade un campo personalizado "
my_noindex
" con un valor de "y". - Nota: si el cuadro de campos personalizados no es visible debajo del editor, haz clic en el menú desplegable "opciones de visualización" en la parte superior de la página y luego marca la casilla "campos personalizados" que aparece.
2: En functions.php (o mejor aún, en tu propio plugin site_functions independiente del tema): Añade tu función de SEO (para ser "llamada" por wp_head) que toma estos valores para la página actual y los inserta en el HTML <head>
.
// muestra la etiqueta noindex si la entrada o página tiene un campo personalizado "my_noindex" con un valor de "y"|"Y"|"yes" ...
function my_meta_tags() {
$noindex = (get_post_meta( get_queried_object_id(), 'my_noindex', true ));
if (strtolower(substr($noindex,0,1)) == 'y') {
?><meta name="robots" content="noindex" />
<?php return; // noindex así que no tiene sentido hacer nada más de SEO
}
// otras cosas de SEO
}
add_action( 'wp_head', 'my_meta_tags',2);
El artículo de Jeff Starr sobre crear tu propio código SEO (incluyendo título y descripción) puede ayudarte. Requiere un tema personalizado/hijo ya que su código va en header.php, sin embargo gran parte del código podría modificarse para la función my_meta_tags anterior. Puede que no aplique el SEO como tú quieres, pero esa es la belleza del Hazlo Tú Mismo: si quieres usar tu descripción cuidadosamente elaborada en un campo personalizado (si está presente), o tu extracto personalizado, o los primeros n caracteres de la descripción; entonces puedes escribir tu código en consecuencia. También he tenido la intención de escribir un artículo sobre este tema - si lo hago añadiré un enlace.
Omisiones del código del artículo:
Prevenir etiquetas de título duplicadas (ya que algunos temas insertan las suyas propias). Los temas modernos, diseñados correctamente, deberían permitirte eliminar la etiqueta de título del tema cuando añades lo siguiente a tu functions.php del sitio.
function my_remove_stuff() { remove_theme_support( 'title-tag' ); } add_action('after_setup_theme', 'my_remove_stuff', 15);
Etiquetas Canónicas. Añade lo siguiente a la primera función anterior:
//si la entrada o página tiene un campo personalizado "my_canon" $my_canon = get_post_meta( get_queried_object_id(), 'my_canon', true ); if ( ! empty($my_canon)) : echo '<link rel="canonical" href="' . $my_canon . '" />'; remove_action('wp_head', 'rel_canonical'); // evita que Wordpress inserte una etiqueta canon - no queremos dos endif;
Un plugin de SEO es la opción correcta para muchos usuarios. Sin embargo, si te sientes cómodo escribiendo tu propio código hay muchos beneficios: evitar bloat, evitar dependencia del plugin, evitar (en algunos casos) pagar por soporte, el SEO funciona como tú quieres; no hay conflictos de SEO con tus propias páginas personalizadas dinámicas, etc.

Puedes agregar meta tags directamente al archivo functions.php de tu tema de WordPress enganchando a la acción wp_head. Aquí te mostramos cómo puedes agregar meta tags personalizados para diferentes páginas usando sus IDs:
Añade este código al archivo functions.php de tu tema:
function custom_meta_tags() {
if (is_page()) {
global $post;
$page_id = $post->ID;
switch ($page_id) {
case 2: // Reemplaza con el ID real de tu página
echo '<meta name="description" content="Descripción para la Página 2">';
echo '<meta name="keywords" content="palabra1, palabra2, palabra3">';
break;
case 5: // Reemplaza con el ID real de tu página
echo '<meta name="description" content="Descripción para la Página 5">';
echo '<meta name="keywords" content="palabra4, palabra5, palabra6">';
break;
// Añade más casos según sea necesario
default:
echo '<meta name="description" content="Descripción por defecto">';
echo '<meta name="keywords" content="por, defecto, palabras">';
break;
}
}
}
add_action('wp_head', 'custom_meta_tags');
