منبع حقیقت، محتوا، انتشار و رسانه · فصل ۲ — Page/Version/Block، Forms، SEO و Rollback · 160

SEO Records, Redirect Hygiene و Canonicalization

محتوا یا media تولید می‌کند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمی‌بیند. موضوع جاری: «SEO Records, Redirect Hygiene و Canonicalization». می‌تواند «SEO Records, Redirect Hygiene و Canonicalization» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

SEO Records, Redirect Hygiene, and Canonicalization — en-US

خلاصهٔ درس

محتوا یا media تولید می‌کند اما provenance، rights، version، approval و release boundary را یک سیستم واحد نمی‌بیند. موضوع جاری: «SEO Records, Redirect Hygiene و Canonicalization».

می‌تواند «SEO Records, Redirect Hygiene و Canonicalization» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

خروجی این درس

می‌تواند «SEO Records, Redirect Hygiene و Canonicalization» را در یک pipeline محدود با provenance، rights/version و publication gate تعریف کند.

پیش‌نیازها

1. SEO را به رشته‌های پراکنده تبدیل نکن

اگر redirect، canonical، sitemap، robots و hreflang هر کدام در یک فایل یا پنل جدا نگه‌داری شوند، تضادها دیر دیده می‌شوند. در این درس واحد ممیزی یک SEO Route Record نسخه‌دار است که تمام signalهای مهم یک public route را کنار هم نگه می‌دارد.

2. مرز مالکیت CON-009

CON-009 مالک route-level SEO record و audit است. CON-006 routeهای locale را تولید می‌کند، CON-007 versionهای page/workspace را می‌بندد، CON-008 فرم‌ها را مدیریت می‌کند و CON-010 rollback/monitoring را انجام می‌دهد. این درس آن outcomeها را جذب نمی‌کند.

3. canonical یک preference است، نه حکم قطعی موتور جست‌وجو

RFC 6596 رابطه canonical را برای معرفی IRI ترجیحی میان محتوای duplicate یا superset تعریف می‌کند. Google نیز می‌گوید canonicalization از چند signal استفاده می‌کند و preference اعلام‌شده می‌تواند با canonical انتخاب‌شده متفاوت باشد. پس رکورد ما canonical_intent را ثبت می‌کند، نه «canonical انتخاب‌شده توسط Google» را به‌عنوان واقعیت قطعی.

4. canonical target باید وجود داشته باشد

اگر صفحه /courses/main اشتباهاً /course/main را canonical اعلام کند و آن target وجود نداشته باشد، صرف وجود tag کافی نیست. canonical_target_exists=false باید audit را ببندد و نتیجه را BLOCK_REPAIR کند.

5. redirect class را از canonical intent جدا کن

Redirect رفتار انتقال request است؛ canonical preference درباره نسخه ترجیحی محتواست. یک campaign می‌تواند موقتاً با 307 به مقصد دیگری برود ولی canonical intent بلندمدت منبع، بعد از پایان campaign، همچنان self باشد. این دو را در یک فیلد ادغام نکن.

6. 307 و 308 چرا مهم‌اند؟

RFC 9110، 307 را temporary و 308 را permanent تعریف می‌کند و هر دو در redirect خودکار method را حفظ می‌کنند. این semantics استاندارد HTTP است؛ اما اینکه کدام redirect برای migration شما درست است، باید با intent همان route record تطبیق داده شود.

7. chain را به‌صورت graph ببین

اگر A → B → C دارید، اینکه هر hop به‌تنهایی status معتبر دارد کافی نیست. chain طولانی هزینه crawl و ambiguity را بالا می‌برد و مقصد نهایی را پنهان می‌کند. در contract این درس، migration clean باید به target نهایی مستقیم برسد؛ chain_length > 1 نیازمند repair است.

8. loop باید fail-closed باشد

A → B → A یا هر چرخه دیگر، حتی اگر همه targetها موجود باشند، route سالم نیست. redirect_loop=true یک failure مستقل است و با canonical tag خوب جبران نمی‌شود.

9. target existence را typed نگه دار

true، false و unknown را یکی نکن. اگر redirect target هنوز probe نشده است، UNKNOWN را به success تبدیل نکن. evidence ناقص باید تصمیم را محدود کند تا probe انجام شود.

10. sitemap و indexability باید هم‌جهت باشند

اگر route دائماً redirect می‌شود ولی هنوز در sitemap به‌عنوان URL قابل ایندکس فهرست شده، signalها متناقض‌اند. برای route canonical قابل ایندکس، حضور در sitemap می‌تواند preference را تقویت کند؛ برای source دائماً منتقل‌شده، نگه‌داشتنش در sitemap معمولاً با intent مهاجرت ناسازگار است.

11. robots/noindex را با canonical اشتباه نگیر

Canonical و indexability دو محور متفاوت‌اند. record باید صریحاً indexability و robots_state را نگه دارد. تضادهایی مثل indexable=true همراه NOINDEX باید SIGNAL_CONFLICT شوند؛ tag canonical قرار نیست noindex را «خنثی» کند.

12. locale و hreflang فقط reference هستند

این درس locale set را تولید نمی‌کند؛ فقط locale و hreflang_ref موجود را در audit مصرف می‌کند. اگر دو locale variant به canonicalهای متناقض اشاره کنند، record باید conflict را آشکار کند، نه اینکه با timestamp یکی را انتخاب کند.

13. مثال منفی: migration ظاهراً سبز

فرض کن /old-course با 308 به /courses/main می‌رود، اما canonical صفحه جدید تایپی است، sitemap هر دو URL را نگه داشته و یک locale route دو hop دارد. هیچ‌کدام از این failureها با «redirect کار می‌کند» بسته نمی‌شوند؛ audit باید target، chain و signal alignment را جدا گزارش کند.

14. Transfer: permanent، temporary و localized duplicate

سه route را تغییر بده: یک move دائمی، یک redirect موقت campaign و یک duplicate محلی. برای هرکدام redirect class، canonical intent، sitemap/indexability و target evidence را از نو ثبت کن. temporary redirect را به اشتباه permanent canonical intent تلقی نکن.

15. خروجی قابل ممیزی

SEO Route Record & Redirect Canonical Audit v1 باید Route/Version/Locale، HTTP Status، Redirect Target/Class، Method Preservation، Canonical Intent/Target، Indexability، Robots، Sitemap، Hreflang Ref، Chain Length، Loop، Target Evidence، Signal Conflict، Decision، Reason و Provenance را نگه دارد. SEO_ROUTE_CLEAN فقط برای همان fixture و همان evidence معتبر است.

ارزیابی

پاسخ‌نامه‌ی این درس در بسته‌ی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار می‌فرستد.

AF1 formative

Name the CON-009 owned boundary and one adjacent non-goal.

lesson ✗AI ✗notes ✗

AF2 formative

Why is a working redirect insufficient to prove route-level SEO hygiene?

lesson ✗AI ✗notes ✗

AS1 application

Build SEO Route Record & Redirect Canonical Audit v1 from the supplied migration fixture.

lesson ✗AI ✗notes ✗

AS2 diagnosis

Diagnose a direct redirect whose canonical target does not exist.

lesson ✗AI ✗notes ✗

AS3 decision

Issue a bounded SEO route decision and preserve any UNKNOWN target state.

lesson ✗AI ✗notes ✗

AS4 transfer

Rebuild records for a permanent move, a temporary campaign redirect, and a localized duplicate.

lesson ✗AI ✗notes ✗

AS5 reflection

State the strongest claim supported by the route audit and one claim it does not prove about search-engine canonical selection.

lesson ✗AI ✗notes ✗
ملاک‌های ارزیابی (rubric)

Critical dimensions: exact route/version identity; redirect class/status semantics; canonical intent and target existence; chain/loop detection; sitemap/robots/indexability alignment; locale reference; typed UNKNOWN; bounded decision and transfer. A submission fails if it treats one redirect or canonical annotation as complete SEO proof, hides a broken/unknown target, or claims guaranteed search-engine canonical selection.

منابع و تازگی

RFC 6596 — The Canonical Link Relation
·
Google Search Central — What is URL Canonicalization
·
RFC 9110 — HTTP Semantics
·

مطالعهٔ موارد (case studies)

فایل‌های آزمایشگاه

Inspect the eight synthetic route-record fixtures. Implement evaluate() in starter.py using only the supplied route evidence. Keep redirect semantics, canonical intent, target existence, chain/loop state, sitemap/indexability, and locale references separate. Adjacent form health is deliberately present in one fixture but is outside this lesson's owned decision.