Gdy strona rośnie przez lata, taksonomia zaczyna stawać się problemem. Cichym problemem, bo przez długi czas pozostaje dość niezauważona.
Na początku nic się nie dzieje. Tworzysz nową kategorię, dodajesz tag, próbujesz kolejnego, zmieniasz podejście redakcyjne… i publikujesz dalej.
Ale w miarę jak strona rośnie, pewnego dnia artykuł ląduje w bez kategorii. Innym razem zapominasz o tagu, który pasowałby idealnie. A za trzecim zapominasz, czy dany tag już utworzyłeś, i dlaczego to zrobiłeś (tak/nie).
Jeśli chcesz robić to dobrze, przychodzi moment, w którym klasyfikowanie artykułu zaczyna trwać dłużej, niż powinno. Bo możliwości jest zbyt wiele i nie zawsze wiesz jasno albo pamiętasz, kiedy użyć każdej z nich.
To właśnie mi się przytrafiało i dlatego niedawno wyjaśniłem, jak ponownie skategoryzowałem i otagowałem cały mój WordPress.
Nie będę tutaj powtarzał, jak mam zorganizowaną stronę, poza tym, co niezbędne, żeby lepiej zrozumieć ten system: trzy duże filary: Biznes, Technologia i Rozrywka oraz liczne podkategorie drugiego poziomu w każdym z nich, oprócz tagów.
Przy okazji, jeśli trochę się w tym wszystkim gubisz, tutaj masz artykuł, w którym wyjaśniam różnicę między tagami a kategoriami, oraz kiedy używać jednych albo drugich.
Índice de Contenidos del Artículo
- Cel: szybciej decydować, jak klasyfikować każdy artykuł, i nie narobić bałaganu
- Rozwiązanie: własny ekran w panelu administracyjnym WordPressa
- Do czego to naprawdę służy
- Podsumowanie
- Najczęstsze pytania
- Czym jest taksonomia w WordPressie?
- Do czego służy mapa redakcyjna taksonomii WordPress?
- Jaka jest różnica między kategoriami i tagami w WordPressie?
- Czym są tagi strukturalne?
- Czym są tagi zagnieżdżone?
- Czy ta mapa redakcyjna zmienia taksonomię WordPressa?
- Czy warto tworzyć mapę redakcyjną na małej stronie?
- Czy lepsza organizacja kategorii i tagów pomaga SEO?
Cel: szybciej decydować, jak klasyfikować każdy artykuł, i nie narobić bałaganu
Pomysł polegał na zbudowaniu systemu, który ułatwiałby mi życie podczas tagowania artykułu. Czegoś natychmiastowego i z małą szansą na błąd lub pominięcie.
Dodatkowo, jako cel poboczny, chciałem mieć pewną kontrolę nad tym, ile treści utworzyłem w każdej kategorii lub pod każdym tagiem.
Ważne było tutaj to, że zanim zabrałem się za rozwiązanie, zdefiniowałem dwa typy tagów:
- Strukturalne: To te, które nie należą do konkretnej kategorii, ale opisują format lub intencję artykułu. Na przykład: Poradnik, Recenzja, Polecane, Oszczędzanie lub Prywatność.
- Zagnieżdżone: Te mają już naturalną kategorię. Na przykład, Google Analytics pasuje do podkategorii Analityka, Email do Marketingu, Chromebook do Hardware, Konsole do Gier wideo albo Komiks europejski do Komiksów.
To bardzo ułatwiało wizualizację, jak zaraz zobaczysz.
Rozwiązanie: własny ekran w panelu administracyjnym WordPressa
Mógłbym zbudować to jako mapę myśli, co było moim pierwszym pomysłem ze względu na jej wizualność.
Albo w Excelu, ze względu na liczby.
Ale w obu przypadkach zarządzanie i utrzymanie byłyby ręczne, czego chciałem uniknąć za wszelką cenę.
Rozwiązaniem było więc zbudowanie czegoś wewnątrz WordPressa.
Jak to zrobiłem?
Tworząc niestandardową stronę w panelu administracyjnym WordPressa za pomocą kodu w functions.php.

Ten ekran działa jak mała mapa redakcyjna podzielona na dwie połowy:
Po lewej stronie pojawiają się główne kategorie i ich podkategorie. Pod każdą z nich pokazane są tagi zalecane do klasyfikowania artykułów z tego bloku.
Po prawej stronie pojawiają się tagi, podzielone na dwa wspomniane wcześniej bloki: strukturalne i zagnieżdżone.
Dodatkowo dodałem:
- Wyszukiwarkę.
- Linki do archiwum i edycji
- Licznik artykułów według taksonomii.
Dostęp do niego jest z sekcji wpisów:

Kod
Tutaj zostawiam kod, który dodałem do functions.php, ale uwaga: musisz go edytować, żeby pasował do twoich kategorii i tagów. Możesz zrobić to sam albo opisać to ChatGPT i poprosić, żeby ci go zmodyfikował:
/* =========================================================
* MAPA EDITORIAL DE TAXONOMÍAS
* Página interna para visualizar categorías y etiquetas
* ========================================================= */
add_action('admin_menu', 'yg_mapa_editorial_menu');
function yg_mapa_editorial_menu() {
add_submenu_page(
'edit.php',
'Mapa editorial',
'Mapa editorial',
'manage_categories',
'yg-mapa-editorial',
'yg_render_mapa_editorial'
);
}
/**
* Configuración editorial del mapa.
*/
function yg_mapa_editorial_config() {
return array(
'categorias_principales' => array(
'Negocio',
'Tecnología',
'Ocio',
),
// Categorías obsoletas o que no queremos mostrar en el mapa editorial.
'categorias_excluidas' => array(
'Diseño',
'Diseño gráfico',
'Diseño web',
'Ilustración',
'Usabilidad',
'Sin categoría',
),
// Etiquetas transversales: formato, enfoque o intención del contenido.
'etiquetas_estructurales' => array(
'Tutorial',
'Reseña',
'Recomendado',
'Ahorrar',
'Privacidad',
),
// Etiquetas temáticas/anidadas por pilar.
// Productividad queda como anidada de Negocio.
'etiquetas_anidadas' => array(
'Negocio' => array(
'Productividad',
'Google Analytics',
'CRO',
'SEO',
'Email',
'Acumbamail',
),
'Tecnología' => array(
'WordPress',
'Chromebook',
'Gmail',
'Trello',
'Video',
),
'Ocio' => array(
'Consolas',
'Retro',
'Cómic Americano',
'Cómic Europeo',
'Manga',
'Pérez-Reverte',
),
),
// Etiquetas recomendadas bajo cada categoría.
// La clave debe coincidir con el slug habitual de la categoría.
'etiquetas_por_categoria' => array(
// Negocio
'negocio' => array('Productividad', 'SEO', 'CRO', 'Email', 'Acumbamail', 'Google Analytics'),
'analitica' => array('Google Analytics', 'CRO', 'Tutorial'),
'casos-de-exito' => array('Productividad'),
'ecommerce' => array('CRO', 'Email', 'Acumbamail', 'Google Analytics', 'Tutorial'),
'inversion' => array('Ahorrar'),
'marketing' => array('Email', 'Acumbamail', 'SEO', 'CRO', 'Productividad'),
'negocios-online' => array('Productividad', 'SEO', 'CRO'),
// Tecnología
'tecnologia' => array('WordPress', 'Privacidad', 'Tutorial'),
'hardware' => array('Chromebook', 'Tutorial'),
'herramientas' => array('Trello', 'Gmail', 'WordPress', 'Tutorial'),
'inteligencia-artificial' => array('Video', 'Tutorial'),
'software' => array('WordPress', 'Gmail', 'Trello', 'Privacidad', 'Tutorial'),
// Ocio
'ocio' => array('Reseña', 'Recomendado'),
'comics' => array('Cómic Americano', 'Cómic Europeo', 'Manga', 'Reseña'),
'libros' => array('Pérez-Reverte', 'Reseña', 'Recomendado'),
'musica' => array('Video', 'Reseña'),
'peliculas' => array('Reseña', 'Recomendado'),
'series' => array('Reseña', 'Recomendado'),
'videojuegos' => array('Consolas', 'Retro', 'Reseña', 'Recomendado'),
),
);
}
/**
* Recupera término por nombre o slug.
*/
function yg_mapa_get_term_by_name_or_slug($name, $taxonomy) {
$term = get_term_by('name', $name, $taxonomy);
if (!$term) {
$term = get_term_by('slug', sanitize_title($name), $taxonomy);
}
if (!$term || is_wp_error($term)) {
return null;
}
return $term;
}
/**
* Comprueba si una categoría debe ocultarse.
*/
function yg_mapa_categoria_excluida($term, $config) {
if (!$term || is_wp_error($term)) {
return true;
}
return in_array($term->name, $config['categorias_excluidas'], true);
}
/**
* Render de una etiqueta como píldora compacta dentro de tarjetas de categoría.
*/
function yg_mapa_tag_pill($tag_name) {
$term = yg_mapa_get_term_by_name_or_slug($tag_name, 'post_tag');
if (!$term) {
return '<span class="yg-map-pill yg-map-pill--missing">' . esc_html($tag_name) . ' <small>no existe</small></span>';
}
$edit_link = get_edit_term_link($term->term_id, 'post_tag');
$archive_link = get_term_link($term);
$html = '<span class="yg-map-pill">';
$html .= '<strong>' . esc_html($term->name) . '</strong>';
$html .= '<em>' . intval($term->count) . '</em>';
if (!is_wp_error($archive_link)) {
$html .= '<a href="' . esc_url($archive_link) . '" target="_blank">ver</a>';
}
if ($edit_link) {
$html .= '<a href="' . esc_url($edit_link) . '">editar</a>';
}
$html .= '</span>';
return $html;
}
/**
* Render de tarjeta compacta de categoría.
*/
function yg_mapa_category_card($term, $config) {
if (!$term || is_wp_error($term)) {
return;
}
if (yg_mapa_categoria_excluida($term, $config)) {
return;
}
$archive_link = get_term_link($term);
$edit_link = get_edit_term_link($term->term_id, 'category');
$recommended_tags = array();
if (!empty($config['etiquetas_por_categoria'][$term->slug])) {
$recommended_tags = $config['etiquetas_por_categoria'][$term->slug];
}
echo '<article class="yg-map-card yg-map-card--category" data-map-search="' . esc_attr(strtolower($term->name)) . '">';
echo '<div class="yg-map-card__top">';
echo '<h3>' . esc_html($term->name) . '</h3>';
echo '<span class="yg-map-count">' . intval($term->count) . ' artículos</span>';
echo '</div>';
if (!empty($recommended_tags)) {
echo '<div class="yg-map-card__tags">';
echo '<span class="yg-map-label">Etiquetas recomendadas</span>';
echo '<div class="yg-map-pills">';
foreach ($recommended_tags as $tag_name) {
echo yg_mapa_tag_pill($tag_name);
}
echo '</div>';
echo '</div>';
}
echo '<div class="yg-map-card__actions">';
if (!is_wp_error($archive_link)) {
echo '<a href="' . esc_url($archive_link) . '" target="_blank">Ver archivo</a>';
}
if ($edit_link) {
echo '<a href="' . esc_url($edit_link) . '">Editar</a>';
}
echo '</div>';
echo '</article>';
}
/**
* Render de tarjeta compacta de etiqueta.
* No muestra ya las píldoras "Estructural" / "Anidada".
*/
function yg_mapa_tag_card($tag_name) {
$term = yg_mapa_get_term_by_name_or_slug($tag_name, 'post_tag');
if (!$term) {
echo '<article class="yg-map-card yg-map-card--tag yg-map-card--missing">';
echo '<div class="yg-map-card__top">';
echo '<h3>' . esc_html($tag_name) . '</h3>';
echo '<span class="yg-map-count">no existe</span>';
echo '</div>';
echo '</article>';
return;
}
$archive_link = get_term_link($term);
$edit_link = get_edit_term_link($term->term_id, 'post_tag');
echo '<article class="yg-map-card yg-map-card--tag" data-map-search="' . esc_attr(strtolower($term->name)) . '">';
echo '<div class="yg-map-card__top">';
echo '<h3>' . esc_html($term->name) . '</h3>';
echo '<span class="yg-map-count">' . intval($term->count) . ' artículos</span>';
echo '</div>';
echo '<div class="yg-map-card__actions">';
if (!is_wp_error($archive_link)) {
echo '<a href="' . esc_url($archive_link) . '" target="_blank">Ver archivo</a>';
}
if ($edit_link) {
echo '<a href="' . esc_url($edit_link) . '">Editar</a>';
}
echo '</div>';
echo '</article>';
}
/**
* Render principal.
*/
function yg_render_mapa_editorial() {
if (!current_user_can('manage_categories')) {
wp_die('No tienes permisos para ver esta página.');
}
$config = yg_mapa_editorial_config();
echo '<div class="wrap yg-map-wrap">';
echo '<h1>Mapa editorial</h1>';
echo '<p class="yg-map-intro">Consulta de forma rápida las categorías y etiquetas recomendadas para decidir cómo clasificar cada artículo.</p>';
echo '<input type="search" id="yg-map-search" class="yg-map-search" placeholder="Buscar categoría o etiqueta..." />';
echo '<div class="yg-map-layout">';
/* ======================
* CATEGORÍAS
* ====================== */
echo '<section class="yg-map-panel">';
echo '<div class="yg-map-panel__head">';
echo '<h2>Categorías</h2>';
echo '<p>Estructura principal de la web. Debajo de cada categoría se muestran sus etiquetas anidadas recomendadas.</p>';
echo '</div>';
foreach ($config['categorias_principales'] as $parent_name) {
$parent = yg_mapa_get_term_by_name_or_slug($parent_name, 'category');
if (!$parent || yg_mapa_categoria_excluida($parent, $config)) {
continue;
}
echo '<div class="yg-map-category-group">';
echo '<h2 class="yg-map-group-title">' . esc_html($parent->name) . '</h2>';
yg_mapa_category_card($parent, $config);
$children = get_categories(array(
'taxonomy' => 'category',
'hide_empty' => false,
'parent' => $parent->term_id,
'orderby' => 'name',
'order' => 'ASC',
));
if (!empty($children)) {
echo '<div class="yg-map-child-grid">';
foreach ($children as $child) {
yg_mapa_category_card($child, $config);
}
echo '</div>';
}
echo '</div>';
}
echo '</section>';
/* ======================
* ETIQUETAS
* ====================== */
echo '<section class="yg-map-panel">';
echo '<div class="yg-map-panel__head">';
echo '<h2>Etiquetas</h2>';
echo '<p>Separación editorial entre etiquetas estructurales y etiquetas anidadas por pilar.</p>';
echo '</div>';
// Estructurales
echo '<div class="yg-map-tag-block">';
echo '<h2 class="yg-map-group-title">Estructurales</h2>';
echo '<p class="yg-map-help">Transversales: formato, intención o enfoque. Se pueden usar en artículos de distintas categorías.</p>';
echo '<div class="yg-map-tag-grid">';
foreach ($config['etiquetas_estructurales'] as $tag_name) {
yg_mapa_tag_card($tag_name);
}
echo '</div>';
echo '</div>';
// Anidadas
echo '<div class="yg-map-tag-block">';
echo '<h2 class="yg-map-group-title">Anidadas</h2>';
echo '<p class="yg-map-help">Temáticas: deben usarse principalmente dentro de su pilar o categoría natural.</p>';
foreach ($config['etiquetas_anidadas'] as $group_name => $tags) {
echo '<div class="yg-map-nested-group">';
echo '<h3>' . esc_html($group_name) . '</h3>';
echo '<div class="yg-map-tag-grid">';
foreach ($tags as $tag_name) {
yg_mapa_tag_card($tag_name);
}
echo '</div>';
echo '</div>';
}
echo '</div>';
echo '</section>';
echo '</div>'; // layout
echo '</div>'; // wrap
yg_mapa_editorial_styles();
yg_mapa_editorial_scripts();
}
/**
* CSS interno para la pantalla.
*/
function yg_mapa_editorial_styles() {
?>
<style>
.yg-map-wrap {
max-width: 1320px;
}
.yg-map-intro {
margin: 4px 0 18px;
color: #555;
font-size: 14px;
}
.yg-map-search {
width: 100%;
max-width: 520px;
margin: 0 0 22px;
padding: 10px 12px;
border: 1px solid #ccd0d4;
border-radius: 6px;
background: #fff;
}
.yg-map-layout {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
gap: 22px;
align-items: start;
}
.yg-map-panel {
background: #fff;
border: 1px solid #dcdcde;
border-radius: 8px;
padding: 18px;
}
.yg-map-panel__head {
margin-bottom: 16px;
}
.yg-map-panel__head h2 {
margin: 0 0 4px;
font-size: 18px;
}
.yg-map-panel__head p,
.yg-map-help {
margin: 0;
color: #666;
font-size: 12px;
line-height: 1.45;
}
.yg-map-category-group,
.yg-map-tag-block {
margin-bottom: 22px;
}
.yg-map-category-group:last-child,
.yg-map-tag-block:last-child {
margin-bottom: 0;
}
.yg-map-group-title {
margin: 0 0 10px;
padding: 0 0 7px;
border-bottom: 1px solid #ececec;
font-size: 15px;
font-weight: 700;
color: #1d2327;
}
.yg-map-child-grid,
.yg-map-tag-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
gap: 10px;
}
.yg-map-nested-group {
margin-top: 16px;
}
.yg-map-nested-group h3 {
margin: 0 0 8px;
font-size: 14px;
color: #1d2327;
}
.yg-map-card {
background: #fdfdfd;
border: 1px solid #dcdcde;
border-radius: 8px;
padding: 10px;
min-height: auto;
}
.yg-map-card--missing {
opacity: .65;
border-style: dashed;
}
.yg-map-card__top {
display: flex;
gap: 8px;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 7px;
}
.yg-map-card h3 {
margin: 0;
font-size: 13px;
line-height: 1.25;
font-weight: 700;
color: #1d2327;
}
.yg-map-count {
flex: 0 0 auto;
display: inline-flex;
align-items: center;
white-space: nowrap;
padding: 3px 7px;
border-radius: 999px;
background: #fff4ce;
color: #5f4500;
font-size: 11px;
font-weight: 600;
}
.yg-map-card__tags {
margin-top: 8px;
}
.yg-map-label {
display: block;
margin-bottom: 5px;
font-size: 11px;
font-weight: 700;
text-transform: uppercase;
letter-spacing: .02em;
color: #646970;
}
.yg-map-pills {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.yg-map-pill {
display: inline-flex;
align-items: center;
gap: 5px;
padding: 4px 7px;
border-radius: 999px;
background: #f0f6fc;
border: 1px solid #c5d9ed;
font-size: 11px;
color: #1d2327;
}
.yg-map-pill em {
font-style: normal;
color: #646970;
}
.yg-map-pill a {
text-decoration: none;
}
.yg-map-pill--missing {
background: #fff7f7;
border-color: #f0b8b8;
color: #8a2424;
}
.yg-map-card__actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-top: 7px;
font-size: 11px;
}
.yg-map-card__actions a {
text-decoration: none;
}
@media (max-width: 1100px) {
.yg-map-layout {
grid-template-columns: 1fr;
}
}
</style>
<?php
}
/**
* JS interno para buscador rápido.
*/
function yg_mapa_editorial_scripts() {
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
const input = document.getElementById('yg-map-search');
if (!input) return;
input.addEventListener('input', function () {
const query = this.value.toLowerCase().trim();
const cards = document.querySelectorAll('.yg-map-card');
cards.forEach(function (card) {
const text = card.textContent.toLowerCase();
card.style.display = text.includes(query) ? '' : 'none';
});
});
});
</script>
<?php
}
Poza tym, jeśli chcesz, możesz oddzielić CSS do style.css, ale ja wolałem trzymać cały kod razem.
Do czego to naprawdę służy
Ta mapa redakcyjna nie zmienia taksonomii WordPressa, tylko ułatwia korzystanie z niej.
Wcześniej miałem listę kategorii i tagów według kryterium wybranego kiedyś. Teraz mam to kryterium widoczne i pod ręką, co pozwala mi:
- Szybciej klasyfikować wpisy, zachowując spójność redakcyjną.
- Unikać tworzenia zduplikowanych lub niepotrzebnych tagów.
- Wykrywać taksonomie z niewielką liczbą artykułów.
- Prawidłowo skalować stronę, jeśli będę publikował więcej treści, bo o to chodzi.
Podsumowanie
Organizowanie taksonomii WordPressa to nie tylko tworzenie kategorii i tagów, ale posiadanie systemu, który pozwala dobrze ich używać.
W moim przypadku na tym etapie potrzebowałem warstwy redakcyjnej nad tym wszystkim: prostego systemu, który podpowiadałby tagi mające sens dla każdego typu treści.
Jeśli masz małą stronę, może tego nie potrzebujesz, ale jeśli publikujesz od lat i zaczynasz już wahać się między kategoriami, tagami, tematami, formatami i narzędziami, stworzenie mapy redakcyjnej lub systemu redakcyjnego może oszczędzić ci sporo chaosu, teraz i w przyszłości.
To nie jest wielka rewolucja techniczna, ale jest to ulepszenie, które oszczędza czas i pozwala zawsze publikować według tych samych kryteriów.
Najczęstsze pytania
Czym jest taksonomia w WordPressie?
Taksonomia w WordPressie to sposób organizowania treści. Najczęstsze to kategorie i tagi, choć WordPress pozwala też tworzyć taksonomie niestandardowe. W praktyce służą do klasyfikowania wpisów i pomagają sprawić, że strona jest łatwiejsza w nawigacji i utrzymaniu.
Do czego służy mapa redakcyjna taksonomii WordPress?
Służy do jasnego określenia, jakich kategorii i tagów używać w każdym artykule. Zamiast decydować z pamięci przy każdej publikacji, masz wewnętrzny ekran, na którym widzisz kategorie, zalecane tagi i redakcyjną funkcję każdego terminu.
Jaka jest różnica między kategoriami i tagami w WordPressie?
Kategorie zwykle reprezentują duże sekcje strony. Tagi służą do łączenia treści według tematu, formatu, narzędzia, autora, intencji lub ujęcia. Na przykład kategorią może być “Technologia”, a tagiem “WordPress”, “Poradnik” lub “Prywatność”.
Czym są tagi strukturalne?
To tagi przekrojowe, które można stosować do artykułów z różnych kategorii. Na przykład “Poradnik”, “Recenzja”, “Polecane”, “Oszczędzanie” lub “Prywatność”. Nie należą do jednej sekcji, lecz opisują typ treści lub jej intencję.
Czym są tagi zagnieżdżone?
To tagi, które mają naturalną kategorię odniesienia. Na przykład “Google Analytics” pasuje do Analityki, “Email” do Marketingu, “Konsole” do Gier wideo albo “Komiks europejski” do Komiksów. Pomagają utrzymać bardziej spójną klasyfikację.
Czy ta mapa redakcyjna zmienia taksonomię WordPressa?
Niekoniecznie. Mapa redakcyjna sama w sobie nie musi modyfikować kategorii ani tagów. Jej główną funkcją jest bycie wizualnym przewodnikiem w panelu administracyjnym, żeby lepiej decydować, jak klasyfikować każdy wpis.
Czy warto tworzyć mapę redakcyjną na małej stronie?
Jeśli masz niewiele artykułów, prawdopodobnie nie jest to konieczne. Zaczyna mieć sens, gdy strona rośnie, pojawia się wiele kategorii lub tagów, publikujesz na kilka tematów albo potrzebujesz utrzymać jaśniejsze kryterium redakcyjne.
Czy lepsza organizacja kategorii i tagów pomaga SEO?
Może pomóc pośrednio. Czytelniejsza taksonomia poprawia strukturę wewnętrzną, zapobiega duplikatom, ułatwia linkowanie i pozwala tworzyć bardziej użyteczne archiwa kategorii lub tagów. Ważne, by nie tworzyć bezsensownych terminów ani pustych lub bardzo ubogich stron archiwów.

Dodaj komentarz