Tips & Tricks

Implementacion de SEO con Claude Code

Aprende sobre la implementacion de SEO con Claude Code. Consejos practicos y ejemplos de codigo incluidos.

Mejorar UX y SEO simultaneamente con breadcrumbs

Los breadcrumbs son un elemento de navegacion que muestra visualmente al usuario su ubicacion dentro del sitio. Si se implementan correctamente, se logra mejorar la usabilidad y el SEO al mismo tiempo.

Componente basico de breadcrumbs

> Crea un componente de breadcrumbs.
> Compatible con datos estructurados (JSON-LD), accesibilidad y diseno responsive.
// components/Breadcrumb.tsx
interface BreadcrumbItem {
  label: string;
  href?: string;
}

interface BreadcrumbProps {
  items: BreadcrumbItem[];
}

export function Breadcrumb({ items }: BreadcrumbProps) {
  const jsonLd = {
    '@context': 'https://schema.org',
    '@type': 'BreadcrumbList',
    itemListElement: items.map((item, index) => ({
      '@type': 'ListItem',
      position: index + 1,
      name: item.label,
      item: item.href ? `https://example.com${item.href}` : undefined,
    })),
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      <nav aria-label="Breadcrumb" className="breadcrumb">
        <ol className="flex flex-wrap items-center gap-1 text-sm text-gray-600">
          {items.map((item, index) => (
            <li key={index} className="flex items-center">
              {index > 0 && (
                <span className="mx-2 text-gray-400" aria-hidden="true">/</span>
              )}
              {item.href && index < items.length - 1 ? (
                <a
                  href={item.href}
                  className="text-blue-600 hover:underline"
                >
                  {item.label}
                </a>
              ) : (
                <span aria-current="page" className="text-gray-800 font-medium">
                  {item.label}
                </span>
              )}
            </li>
          ))}
        </ol>
      </nav>
    </>
  );
}

Generacion automatica de breadcrumbs desde la URL

// utils/breadcrumb.ts
const labelMap: Record<string, string> = {
  blog: 'Blog',
  category: 'Categoria',
  tags: 'Etiquetas',
  about: 'Acerca de',
};

export function generateBreadcrumbs(pathname: string): BreadcrumbItem[] {
  const segments = pathname.split('/').filter(Boolean);
  
  const items: BreadcrumbItem[] = [
    { label: 'Inicio', href: '/' },
  ];

  let currentPath = '';
  segments.forEach((segment, index) => {
    currentPath += `/${segment}`;
    const isLast = index === segments.length - 1;
    
    items.push({
      label: labelMap[segment] || decodeURIComponent(segment),
      href: isLast ? undefined : currentPath,
    });
  });

  return items;
}

Ejemplo de integracion en Astro

---
// layouts/BlogPost.astro
import { Breadcrumb } from '../components/Breadcrumb';

const { frontmatter } = Astro.props;
const breadcrumbItems = [
  { label: 'Inicio', href: '/' },
  { label: 'Blog', href: '/blog' },
  { label: frontmatter.category, href: `/blog/category/${frontmatter.category}` },
  { label: frontmatter.title },
];
---

<Breadcrumb items={breadcrumbItems} />

Variaciones de estilos

/* Estilo con flechas */
.breadcrumb-arrow li + li::before {
  content: '>';
  margin: 0 0.5rem;
  color: #9ca3af;
}

/* Estilo con iconos */
.breadcrumb-icon li:first-child a::before {
  content: '';
  display: inline-block;
  width: 16px;
  height: 16px;
  background: url('/icons/home.svg') no-repeat center;
  margin-right: 4px;
  vertical-align: middle;
}

/* Movil: mostrar solo los ultimos 2 */
@media (max-width: 640px) {
  .breadcrumb li:not(:nth-last-child(-n+2)) {
    display: none;
  }
  .breadcrumb li:nth-last-child(2)::before {
    content: '... / ';
  }
}

Tests

import { describe, it, expect } from 'vitest';
import { generateBreadcrumbs } from './breadcrumb';

describe('generateBreadcrumbs', () => {
  it('pagina de inicio', () => {
    const result = generateBreadcrumbs('/');
    expect(result).toEqual([{ label: 'Inicio', href: '/' }]);
  });

  it('pagina de articulo de blog', () => {
    const result = generateBreadcrumbs('/blog/my-article');
    expect(result).toHaveLength(3);
    expect(result[1]).toEqual({ label: 'Blog', href: '/blog' });
    expect(result[2].href).toBeUndefined();
  });
});

Summary

Los breadcrumbs son un componente importante tanto para el SEO como para la accesibilidad. Si le pides a Claude Code que implemente tambien la compatibilidad con datos estructurados, los breadcrumbs apareceran en los resultados de busqueda de Google. Para mas detalles sobre datos estructurados, consulta Google Search Central.

#Claude Code #breadcrumb #navigation #structured data #UX