seo
جنگو

جلوگیری از کدگذاری اضافی URLها و بهبود ایندکس صفحه

  • 1403/09/14

در گوگل کنسول هنگام بررسی تگ‌های canonical ممکن است خطایی به وجود بیاید که آدرس‌های URL فارسی شما شناسایی نشده و دارای مشکل باشند، مانند:

https://example.com/articles/%da%86%d8%b1%d8%a7-%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87-%d8%a7%d8%b2-salt-%d8%af%d8%b1-%d8%b1%d9%85%d8%b2%d9%86%da%af%d8%a7%d8%b1%db%8c-%d9%be%d8%b3%d9%88%d8%b1%d8%af%d9%87%d8%a7-%d8%b6%d8%b1%d9%88%d8%b1%db%8c-%d8%a7%d8%b3%d8%aa-%d8%a7%d9%85%d9%86%db%8c%d8%aa-%d8%a8%db%8c%d8%b4%d8%aa%d8%b1-%d8%af%d8%b1

اگر در تگ‌ها از این حالت برای نمایش URL استفاده کنید، ممکن است که خطای بالا را دریافت کنید:

<link rel="canonical" href="{{ request.build_absolute_uri|urlunquote }}">

علت ایجاد URLهایی با کدگذاری چندلایه معمولاً به نحوه مدیریت کدگذاری در سایت و لینک‌دهی نادرست برمی‌گردد.

کدگذاری بیش از حد (Double Encoding)

مشکل از {{ request.build_absolute_uri }} است که به صورت پیش‌فرض، URL را به همراه حروف فارسی کدگذاری می‌کند و این باعث ایجاد کدگذاری چندلایه در canonical URL می‌شود. برای حل این مشکل، باید URL را طوری تنظیم کنید که فقط یک بار کدگذاری شود.

راه حل پیشنهادی: استفاده از templatetags سفارشی

import urllib.parse
from django import template

register = template.Library()

@register.filter
def urlunquote(value):
    return urllib.parse.unquote(value)

کد بالا یک فیلتر سفارشی در Django ایجاد می‌کند که وظیفه باز کردن (unquote) کدگذاری‌های URL را بر عهده دارد.

جهت استفاده:

{% load custom_filters %}  {# بارگذاری فیلتر سفارشی #}

<link rel="canonical" href="{{ request.build_absolute_uri|urlunquote }}">
دیدگاه
نوشتن یک دیدگاه

آدرس ایمیل شما منتشر نخواهد شد، فیلدهای الزامی علامت گذاری شده است*.

عضویت در خبرنامه

رایگان ثبت نام کنید و اولین نفری باشید که از پست های جدید مطلع می شوید.