직원이 무엇을 만들기 전에 알고 있는 것

누구나 웹사이트에 모델을 지시할 수 있습니다. 이것은 모든 페이지에 적용되는 규칙, 각각의 존재 이유, 그리고 그들 중 어느 것이 그것에 대해 경고하는 대신 발행을 멈추는 것입니다.

아래의 모든 규칙은 우리가 운영하는 사이트에서 일어난 사건에 의해 지불되었습니다 - 순위 절벽, 깨진 번역, 자체 소스 코드를 렌더링하는 페이지. 우리는 최선의 실행 방법을 추측하지 않습니다; 우리는 이미 잘못 된 것을 기록하고 그래서 그것은 당신의 사이트에도 잘못되지 않도록.

게시를 완전히 차단하는 규칙: 8 날짜 12. 차단된 페이지는 이유와 함께 직원에게 반환되고 다시 시도합니다. 게시되지 않고 나중에 경고합니다.

1. One page, one subject

블록 게시

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

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

경고

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

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

블록 게시

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

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

블록 게시

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

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

블록 게시

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

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

블록 게시

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

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

블록 게시

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

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

블록 게시

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

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

경고

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

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

경고

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

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

블록 게시

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

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

이것은 왜 스타일 가이드가 아닌 린터인가

명령어에만 존재하는 규칙은 제안이며, 모델은 대부분의 시간 동안 그 규칙을 따르고 나머지는 조용히 따르지 않습니다. 3개월 후에 트래픽 보고서에서 알게 됩니다. 따라서 이러한 규칙은 페이지가 작성된 후 라이브로 전환되기 전에 코드로 실행됩니다. 차단 규칙에 실패한 페이지는 이유와 함께 반환되고 다시 작성됩니다. 결과는 어느 방식이든 리셉션에 나타나므로 어떤 검사가 실행되었는지 알 수 있습니다.

그리고 아무것도 당신이 그렇게 말하기 전까지 인덱스되지 않습니다

모든 사이트 noindex 시작. 기본적으로 당신이 발견해야하지 않습니다 — 규칙으로 linter 강제, 이러한 사이트는 도메인을 공유하고 하나 나쁜 이웃은 모든 사람이 그것에 상처 때문에. 당신의 사이트를 찾을 가치가있을 때, 당신은 설정에서 인덱싱을 켜고 그것은 크롤링 시작.

첫 번째 쉬프트를 무료로 실행하세요