Mbere Icyo ari cyo cyose

Akadomo A Urugero: Ku A Ipaji:. i Kuri Ipaji:, Rimwe, na Bya Guhagarara A & Ongera ku.

Hasi: ya: ku A Ipaji: Gukoresha - A, A Umwandiko Ururimi:, A Ipaji: Inkomoko Inyandikoporogaramu. OYA Ku; OYA Gyayo ku Ipaji:.

A Gutangaza: 8 Bya 12. A Ipaji: ni Inyuma Kuri i Na: i, na Hanyuma. OYA na.

1. One page, one subject

Gutangaza:% S

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

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

Impuruza

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

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

Gutangaza:% S

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

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

Gutangaza:% S

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

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

Gutangaza:% S

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

Ikintu: 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 %}

Gutangaza:% S

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

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

Gutangaza:% S

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

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

Gutangaza:% S

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

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

Impuruza

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

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

Impuruza

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

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

Gutangaza:% S

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

Ikintu: 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.

iyi ni a Na OYA a Imisusire

A in ni A - i Umurongo: Bya i Igihe na OYA i, na Ibisohoka in A Ibirimo: Icyegeranyo. Gukoresha Nka Idosiye, Nyuma i Ipaji: ni na Mbere. A Ipaji: A ni Inyuma Na: i na. Igisubizo ni ku i,.

ni Birenzeho

Ipaji:. Nka A Mburabuzi Kuri - Nka A i, Gusangiza A Urwego: na Rimwe ku. Ipaji: ni, Kugirango ku in Igenamiterere na.

Itangira Ihindurangano