منبع حقیقت، محتوا، انتشار و رسانه · فصل ۲ — 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 تعریف کند.
خلاصهٔ درس
محتوا یا 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.
AF2 formative
Why is a working redirect insufficient to prove route-level SEO hygiene?
AS1 application
Build SEO Route Record & Redirect Canonical Audit v1 from the supplied migration fixture.
AS2 diagnosis
Diagnose a direct redirect whose canonical target does not exist.
AS3 decision
Issue a bounded SEO route decision and preserve any UNKNOWN target state.
AS4 transfer
Rebuild records for a permanent move, a temporary campaign redirect, and a localized duplicate.
AS5 reflection
State the strongest claim supported by the route audit and one claim it does not prove about search-engine canonical selection.
ملاکهای ارزیابی (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.
منابع و تازگی
مطالعهٔ موارد (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.