Lo que su empleado sabe antes de construir nada

Cualquiera puede señalar un modelo en un sitio web. Estas son las reglas que se aplican a cada página, por qué existe cada una, y cuál de ellas deja de publicar en lugar de advertir sobre ello.

Cada regla de abajo fue pagada por un incidente en un sitio que corremos — un acantilado de clasificación, una traducción rota, una página que rindió su propio código fuente. No estamos adivinando en la mejor práctica; estamos escribiendo lo que ya salió mal para que no vaya mal en su sitio también.

Reglas que bloquean una publicación: 8 de 12. Una página bloqueada se devuelve al empleado con la razón, y lo intenta de nuevo. No se publica y se advierte después.

1. One page, one subject

bloques publicar

Exactly one <h1>. A descriptive <title> of 15-60 characters.

¿Por qué?: Title is the strongest per-page signal Google has. Google rewrites titles for the SERP most of the time, but the signal it forms from yours still affects ranking, and a generic or duplicated title reads as a quality problem.

2. A description written for a human

advierte

A meta description of 140-158 characters, unique to the page.

¿Por qué?: Description does not rank the page, it decides whether anyone clicks it. Too short wastes the snippet; too long truncates mid-sentence.

3. No shared body text, ever

bloques publicar

Every page gets body copy and FAQ answers written for that page. Never a shared template with a noun swapped in.

¿Por qué?: This is the one that costs months. A site we run shipped ~1700 pages on one generic FAQ body and a site-level quality classifier suppressed the whole domain — pages still indexed, ranking gone, no manual action to appeal. Recovery ran on core-update timescale.

4. Absolute canonical, paired with hreflang

bloques publicar

Every page self-canonicalises with an absolute URL. Any hreflang cluster ships alongside that canonical, also absolute.

¿Por qué?: Relative hrefs are silently dropped. hreflang without a self-canonical fills the index report with "Duplicate without user-selected canonical" — 56,801 pages on one site we run.

5. Markup may only claim what the page shows

bloques publicar

Structured data mirrors the visible text exactly. Schema goes on the page types that earn a rich result, not on everything.

¿Por qué?: Schema is not a general ranking input and not required for AI search -- Google says so directly. Markup that claims a price or a question the page never shows is a violation that can earn a manual action.

6. Django comments are {% comment %}

bloques publicar

Never {# #}. Not even on one line.

¿Por qué?: Django's template lexer regex has no DOTALL flag, so {# #} only closes on its own line. A multi-line one renders as visible page text, and if it contains a {% %} substring the lexer treats it as a real tag and every render crashes. Both have happened in production.

7. Positional {0} slots in translatable strings

bloques publicar

Any string that will be machine-translated uses {0}, {1} — never {name}.

¿Por qué?: MT engines translate or transliterate the word inside the braces, or drop a brace entirely. A numeric slot has no word to translate and survives intact. This silently broke about 10% of non-English rows on one site before anyone noticed.

8. Nothing is indexable until it is finished

bloques publicar

Pages ship noindex. Indexing is a deliberate opt-in by the owner, per site.

¿Por qué?: These sites share a wildcard domain. One spam tenant indexed on that wildcard damages every other tenant on it, and a half-finished page indexed on day one takes months to undo.

9. Build the thing, do not describe the thing

advierte

A page either does something useful or says something specific. A page that only describes a tool is not a page.

¿Por qué?: Thin wrappers around someone else's API are the clearest signal a quality classifier has. Real utility is what survives a core update.

11. Alt text and intrinsic dimensions on every image

advierte

Every <img> has alt text and explicit width/height.

¿Por qué?: Alt text is an accessibility requirement first and an indexing signal second. Missing dimensions cause layout shift, which is a Core Web Vitals failure on mobile — and mobile is what gets indexed.

12. Retired URLs return 410, verified

bloques publicar

A removed page returns 410 Gone, confirmed by an actual request after deploy.

¿Por qué?: A 404 lingers as a soft-404 for months; a 410 deindexes cleanly. And per-view dispatch often intercepts the request before the 410-returning view is ever reached, so the check has to be a real HTTP request, not a code read.

Por qué esto es un linter y no una guía de estilo

Una regla que sólo vive en una instrucción es una sugerencia: el modelo lo sigue la mayor parte del tiempo y en silencio no hace el resto, y se encuentra tres meses después en un Denunciar de tráfico. Así que se ejecutan como código, después de que la página se escribe y antes de que se ponga en marcha. Una página que falla una regla de bloqueo se devuelve con la razón y se reescriba. El resultado está en el recibo de cualquier manera, por lo que se puede ver qué cheques se ejecutaron.

Y nada se indexa hasta que tú lo digas.

Cada sitio comienza noindex. No como un defecto que usted tiene que descubrir — como una regla el linter impone, porque estos sitios comparten un dominio y un mal vecino lastima a todos en él. Cuando su sitio vale la pena encontrar, usted enciende la indexación en la configuración y comienza a ser rastreado.

Ejecutar su primer turno libre