تغییر قالب وردپرس: در آزمایش ما عنوان و توضیحات سئو ماند، کد ردیابی قالب قبلی نماند

جعبه تعویض قالب با سه کارت عنوان، توضیحات و canonical و تگ کد ردیابی که کنار جعبه جا مانده است
محصولات زیر برای شماست...
جدیدترین مقالات
دسترسی سریع
فهرست محتوا

سایت آزمایشی ما هفت نوشته، پنج برگه، دو منو و چند ابزارک داشت و با قالب سالینت (Salient 18.4.4) ساخته شده بود؛ آن را در Docker روی کامپیوتر خودمان اجرا کردیم. ما سایت را با WP Staging Pro کپی کردیم تا ببینیم تغییر قالب وردپرس چه چیزی را عوض می‌کند. روی کپی یک بار به آسترا (Astra 4.14.2) و یک بار به Twenty Twenty-Five رفتیم و ۱۲ صفحه را قبل و بعد از هر تعویض خواندیم: صفحه اصلی، «درباره»، «تماس»، فهرست نوشته‌ها، پنج نوشته، یک دسته، یک جست‌وجو و یک صفحه ۴۰۴. افزونه رنک مث (Rank Math 1.0.280) فعال بود. همان سالینت را در نوشته ترجمه قالب با لوکو هم، روی همان وردپرس ۷٫۱٫۴، آزمایش کرده بودیم.

عنوان سئو (تگ title)، توضیحات، robots و canonical در هر ۱۲ صفحه همان ماند. اما کد ردیابی و CSS که در تنظیمات خود سالینت گذاشته بودیم دیگر در هیچ صفحه‌ای نبود، H1 و داده ساختاریافته صفحه‌ها تغییر کرد و دو برگه که به قالب‌های برگه سالینت وصل بودند، با قالب پیش‌فرض آسترا نمایش داده شدند. جدول زیر همین‌هاست و بقیه نوشته توضیح هر ردیف:

چیزی که خواندیمقبل (سالینت)بعد (آسترا)
عنوان سئو، توضیحات، robots و canonicalخوانده شدهمان، در ۱۲ صفحه از ۱۲
H1 در صفحه اصلی، «درباره» و «تماس»۰۱ در هر سه
BreadcrumbList در JSON-LD۰ صفحه۱۱ صفحه از ۱۲
ویژگی itemtype در هر صفحه۰۷ تا ۲۱
کد ردیابی و CSS تنظیمات قالب۱۲ صفحه از ۱۲۰ صفحه از ۱۲
قالب برگه «درباره» و «تماس»قالب سالینتقالب پیش‌فرض آسترا
ابزارک نوار کناری برگه «درباره»دیده می‌شدبه ابزارک‌های غیرفعال رفت

کپی WP Staging سه چیز را عوض می‌کند: ورود، نشانی‌ها و robots

ساخت کپی با WP Staging Pro (نسخه ۶٫۱۸٫۰) ۲۳ ثانیه طول کشید. افزونه یک پوشه استیجینگ کنار سایت و جدول‌هایی با پیشوند wpstg0_ ساخت.

پنجره ساخت سایت استیجینگ در Wp Staging Pro: نام کپی، نشانی آن، فهرست جدول‌ها و فایل‌ها و حجم تخمینی

پنجره نام پیش‌فرض را نشان می‌دهد؛ ما نام را staging گذاشتیم.

اولین تغییر برگه ورود است: بازدیدکننده ناشناس به‌جای صفحه‌ها یک برگه ورود می‌بیند، با پاسخ ۲۰۰، عنوان «You need to login to access that page» و برچسب noindex,follow. فیلتر wpstg.frontend.showLoginForm در کد افزونه است و اگر true برگرداند، برگه ورود نمی‌آید. تنظیمات افزونه هم گزینه‌ای برای دسترسی همه بازدیدکنندگان دارد؛ آن را در کد دیدیم و امتحان نکردیم. ما فیلتر را با یک افزونه ضروری (mu-plugin) روشن کردیم:

PHP
وردپرس نیاز
<?php
add_filter( 'wpstg.frontend.showLoginForm', '__return_true' );

این دو خط را در پرونده‌ای مثل staging-visitors.php در پوشه mu-plugins خود کپی بگذارید؛ کپی پوشه wp-content خودش را دارد و اگر mu-plugins نیست، بسازیدش. این فیلتر هر کسی را که نشانی کپی را داشته باشد به آن راه می‌دهد: ما آن را روی سایت آزمایشی خودمان گذاشتیم و روی کپی‌ای که از اینترنت دیده می‌شود فقط تا پایان خواندن بماند.

دومین تغییر نشانی‌هاست. ساختار پیوند یکتا (Permalink) کپی خالی بود، در حالی که سایت اصلی «نام نوشته» داشت؛ افزونه در کدش ساختار را خالی می‌کند و گزینه Keep Permalinks هم دارد (در کد دیدیم). پرونده htaccess کپی هم همان قاعده‌های سایت اصلی را داشت: نشانی برگه «درباره» در پوشه استیجینگ ما را به سایت اصلی می‌فرستاد. ما ساختار را برگرداندیم و htaccess را با مسیر پوشه استیجینگ نوشتیم.

سومین تغییر robots است. گزینه «از موتورهای جستجو درخواست کن تا محتوای سایت را بررسی نکنند» در کپی روشن بود (WP Staging آن را در کد روشن می‌کند)، robots کپی noindex, nofollow بود و canonical نمی‌آمد. برای خواندن این دو، تیک آن گزینه را فقط روی سایت آزمایشی خودمان برداشتیم. روی کپی‌ای که از اینترنت دیده می‌شود این کار را نکنید؛ robots و canonical را بعد از تعویض روی سایت اصلی بخوانید.

بعد از این چهار کار (فیلتر، پیوند یکتا، htaccess و گزینه robots)، سایت و کپی را بدون تغییر قالب خواندیم. عنوان سئو، توضیحات، تگ‌های og، robots و canonical در هر ۱۲ صفحه یکی بود؛ فقط نشانی خود کپی در og:url، og:image و canonical فرق داشت.

قبل و بعد را با یک اسکریپت کوتاه بخوانید

این اسکریپت bash برای هر نشانی عنوان سئو، canonical، robots و شمار H1، JSON-LD، BreadcrumbList، itemtype و یک شناسه ردیابی را چاپ می‌کند. به ترمینالی با curl و grep نیاز دارد (مک، لینوکس یا Git Bash در ویندوز):

CODE
وردپرس نیاز
bash
ID="G-XXXXXXXXXX"
for u in \
  "https://mysite.example/staging/" \
  "https://mysite.example/staging/about/" \
  "https://mysite.example/staging/weekly-backup/"
do
  curl -sL "$u" > page.html
  echo "== $u"
  grep -o '<title>[^<]*</title>' page.html
  grep -o '<link rel="canonical"[^>]*>' page.html
  grep -o '<meta name="robots"[^>]*>' page.html
  echo "h1: $(grep -o '<h1[ >]' page.html | wc -l)"
  echo "json-ld: $(grep -o 'application/ld+json' page.html | wc -l)"
  echo "breadcrumb: $(grep -o 'BreadcrumbList' page.html | wc -l)"
  echo "itemtype: $(grep -o 'itemtype=' page.html | wc -l)"
  echo "tracking id: $(grep -o "$ID" page.html | wc -l)"
done

شناسه و نشانی‌ها را با مقدار خودتان عوض کنید و اسکریپت را در پرونده‌ای به نام check.sh بگذارید. فرمان‌های زیر را اجرا کنید: اولی قبل از تعویض، دومی بعد از آن، و سومی تفاوت را نشان می‌دهد:

CODE
وردپرس نیاز
bash
bash check.sh > before.txt
bash check.sh > after.txt
diff before.txt after.txt

grep مربوط به robots فقط با افزونه‌ای چیزی چاپ می‌کند که تگ را با گیومه دوتایی بنویسد؛ رنک مث این‌طور می‌نویسد. canonical را خود وردپرس هم روی نوشته‌ها و برگه‌ها چاپ می‌کند. ما همین کد را روی سه نشانی کپی خودمان اجرا کردیم و ۱۰ خط خروجی تغییر کرد: H1 از صفر به یک در دو برگه، BreadcrumbList از صفر به یک در «درباره» و در نوشته، itemtype از صفر به ۸، ۸ و ۹، و شناسه ردیابی از یک به صفر در هر سه.

عنوان سئو، توضیحات و canonical تغییر نکردند

با رنک مث فعال، عنوان سئو، توضیحات، og:title، og:image، robots و canonical در هر ۱۲ صفحه بعد از رفتن به آسترا همان بود. با قالب بلوکی Twenty Twenty-Five هم همین نتیجه آمد. نقشه سایت و فید هم در هر سه حالت پاسخ ۲۰۰ دادند.

تنها استثنا og:description صفحه نوشته‌ها بود که کسی برایش توضیح ننوشته بود: متن پیش‌نمایش در سالینت و آسترا در دو جای متفاوت بریده شد. سایتی بدون افزونه سئو را آزمایش نکردیم و درباره آن حرفی نمی‌زنیم. رتبه را هم نمی‌سنجیم؛ فقط HTML را می‌خوانیم.

H1 و داده ساختاریافته تغییر کردند

با تنظیمات سالینت در سایت آزمایشی ما، صفحه اصلی، «درباره» و «تماس» اصلاً H1 نداشتند. آسترا به هر کدام عنوان برگه را به‌عنوان H1 داد. فهرست نوشته‌ها در سالینت و آسترا بدون H1 ماند و در Twenty Twenty-Five یک H1 گرفت. تیتر نوشته‌ها در فهرست هم در سالینت H3 و در آسترا H2 بود. پرونده HTML صفحه اصلی از ۵۱٬۱۰۹ بایت با سالینت به ۱۱۳٬۴۴۶ بایت با آسترا رسید؛ بیشتر این افزایش CSS درون‌خطی است: ۱۸٬۸۱۸ بایت با سالینت و ۸۲٬۴۱۰ بایت با آسترا.

نان‌ریزه (Breadcrumb) را در دو جا جدا بخوانید. در JSON-LD رنک مث، BreadcrumbList بعد از رفتن به آسترا در ۱۱ صفحه از ۱۲ آمد، همه جز صفحه اصلی؛ اما ده تا از آن صفحه‌ها در HTML نان‌ریزه‌ای نشان نمی‌دادند. آسترا پشتیبانی rank-math-breadcrumbs را اعلام می‌کند و رنک مث با این اعلام BreadcrumbList را می‌سازد، با اینکه گزینه خود رنک مث خاموش بود. نام اولین عنصر BreadcrumbList هم «Home» انگلیسی بود.

آسترا خودش هم microdata اضافه می‌کند: ۷ تا ۲۱ ویژگی itemtype در هر صفحه، در برابر صفر در سالینت. هر دو را با دو فیلتر آسترا می‌شود خاموش کرد، که ما در یک افزونه ضروری گذاشتیم:

PHP
وردپرس نیاز
<?php
add_filter( 'astra_rank_math_theme_support', '__return_false' );
add_filter( 'astra_schema_enabled', '__return_false' );

فیلتر اول BreadcrumbList را از ۱۱ صفحه برداشت و دومی microdata را؛ هر کدام جدا آزموده شد و دیگری را تغییر نداد. هر دو با هم: ۰ صفحه با BreadcrumbList و ۰ ویژگی itemtype در هر ۱۲ صفحه، با همان یک بلوک JSON-LD.

کد ردیابی و CSS تنظیمات قالب قبلی به قالب جدید نمی‌آید

کد ردیابی ما یک اسکریپت آزمایشی بود که جای کد آمار گذاشتیم و CSS ما یک قاعده آزمایشی. هر دو را در گزینه‌های «Custom JS Code (Head)» و «Custom CSS Code» تنظیمات سالینت وارد کردیم و خود سالینت آن‌ها را در صفحه می‌آورد. بعد از رفتن به آسترا هر دو در ۰ صفحه از ۱۲ بود، با اینکه هنوز در پایگاه‌داده مانده بودند. اگر کد ردیابی شما هم آنجاست، قبل از تعویض آن را جای دیگری، مثلاً در یک افزونه، بگذارید.

CSS اضافی سفارشی‌ساز هم برای هر قالب جداست و وردپرس آن را با نام قالب پیدا می‌کند؛ روی آسترا نبود. لوگو فرق داشت. لوگوی «هویت سایت» سفارشی‌ساز در تنظیم custom_logo ذخیره می‌شود و وردپرس نسخه‌ای از آن را در گزینه سایت‌محور site_logo هم نگه می‌دارد؛ آسترا لوگو را نشان داد. وقتی site_logo و custom_logo سالینت را پاک کردیم، آسترا در هیچ‌یک از ۱۲ صفحه لوگو نداشت، با اینکه فیلد لوگوی خود سالینت هنوز پر بود.

دو برگه ما، «درباره» و «تماس»، به قالب‌های برگه خود سالینت وصل بودند. آسترا آن پرونده‌ها را ندارد؛ وردپرس مقدار ذخیره‌شده را نگه می‌دارد و برگه را با قالب پیش‌فرض می‌سازد.

کدی هم که قبلاً به پرونده‌های قالب اضافه کرده‌اید باید به قالب فرزند قالب جدید برود.

منو و ابزارک‌ها را وردپرس حدس می‌زند

وردپرس بعد از تعویض، جای منوها و ابزارک‌ها را با اسم جایگاه‌ها حدس می‌زند (wp_map_nav_menu_locations برای منوها و wp_map_sidebars_widgets برای ابزارک‌ها در مستندات): اول اسم یکسان، بعد اسم‌هایی از یک گروه، مثل footer و bottom. روی کپی ما منوی اصلی و منوی بالا به جایگاه‌های primary و secondary_menu رفتند. سه ابزارک نوار کناری وبلاگ به نوار کناری آسترا و سه جایگاه پاورقی به جایگاه‌های پاورقی آسترا رفت. تنها ابزارک نوار کناری برگه به «ابزارک‌های غیرفعال» رفت.

جایگاه mobile_menu در آسترا خالی ماند و منوی موبایل آسترا به‌جای آن همه برگه‌ها را فهرست کرد، از جمله «Sample Page» پیش‌فرض وردپرس که روی سایت ما مانده بود، بی‌آنکه پیوند دسته «فروشگاه» در آن باشد. Twenty Twenty-Five هیچ جایگاه منویی ندارد: بالای صفحه فهرست برگه‌ها آمد، نه منوی ما. ابزارک نوار کناری برگه در آن هم نمایش داده نشد و سه ابزارک وبلاگ در پایگاه‌داده ماندند.

افزونه‌های قالب قبلی را زود خاموش نکنید

با آسترا و هشت افزونه سالینت روشن، صفحه اصلی بدون هیچ کد خامی ساخته شد. وقتی آن هشت افزونه را خاموش کردیم، ۲۵ تگ از شش کد کوتاه (Shortcode) مختلف به شکل متن روی صفحه ماند:

صفحه اول روی آسترا با افزونه‌های سالینت خاموش: کدهای Vc_Row و Vc_Column و Nectar_Btn به شکل متن روی صفحه دیده می‌شود

اگر صفحه‌ای را با صفحه‌ساز قدیمی ساخته‌اید، افزونه‌های آن را تا وقتی صفحه را دوباره نساخته‌اید خاموش نکنید.

برگشتن شدنی است

از آسترا به سالینت برگشتیم. همه فیلدهای ۱۲ صفحه، نقشه سایت و فید با خواندن اول یکی بود، از جمله کد ردیابی و ابزارک نوار کناری برگه. تنظیمات قالب قبلی تا وقتی فعال نیست در پایگاه‌داده می‌ماند.

چه چیزهایی را قبل و بعد از تغییر قالب وردپرس بخوانید

  1. روی کپی سایت کار کنید. برای خواندن آن بدون ورود، فیلتر برگه ورود را روشن کنید (روی کپی‌ای که از اینترنت دیده می‌شود فقط تا پایان خواندن)، پیوند یکتا را برگردانید و htaccess را با مسیر پوشه کپی بنویسید.
  2. اسکریپت بالا را قبل از تعویض اجرا کنید. robots و canonical روی کپی را WP Staging و رنک مث تعیین می‌کنند و چیزی از قالب نمی‌گویند؛ آن‌ها را بعد از تعویض روی سایت اصلی بخوانید.
  3. کد ردیابی، CSS، CSS اضافی، لوگو و محتوای ابزارک‌های قالب قبلی را جای دیگری ذخیره کنید.
  4. قالب را روی کپی تعویض کنید، اسکریپت را دوباره اجرا کنید و diff بگیرید.
  5. منوی موبایل، «ابزارک‌های غیرفعال» و صفحه اصلی را با چشم ببینید؛ اسکریپت این‌ها را نشان نمی‌دهد.

اگر نمی‌خواهید خودتان این کار را بکنید، صفحه پشتیبانی وردپرس نیاز در ۱۰ آبان ۱۴۰۵ نوشته بود: «تعویض قالب سایت فعال روی نسخه آزمایشی (Staging) پیاده و تست می‌شود تا سایت اصلی قطع نشود»، با قیمت قطعی ۲۵ میلیون تومان. درخواست را از ورودی پشتیبانی ثبت کنید. اگر فعال‌سازی قالب به صفحه خطا ختم شد، علت‌های خطای ۵۰۰ را نگاه کنید.

فرستادن کپی به سایت اصلی را آزمایش نکردیم.

پرسش‌های متداول

با تغییر قالب وردپرس عنوان و توضیحات سئو عوض می‌شود؟

در آزمایش ما نه: با رنک مث فعال، عنوان سئو، توضیحات، robots و canonical ۱۲ صفحه بعد از رفتن از سالینت (Salient) به آسترا (Astra) همان بود. سایتی بدون افزونه سئو را آزمایش نکردیم.

بعد از تغییر قالب منو و ابزارک‌ها می‌مانند؟

در آزمایش ما با آسترا بیشترشان ماندند، چون وردپرس جایگاه‌ها را با اسم حدس می‌زند: منوی اصلی و منوی بالا و ابزارک‌های نوار کناری وبلاگ و سه جایگاه پاورقی به جایگاه‌های آسترا رفتند. ابزارک نوار کناری برگه به «ابزارک‌های غیرفعال» رفت، منوی موبایل آسترا به‌جای منو فهرست برگه‌ها را نشان داد و Twenty Twenty-Five، که قالب بلوکی است، منوی ما و ابزارک نوار کناری برگه را نشان نداد.

بعد از تغییر قالب کد ردیابی و CSS که در تنظیمات قالب گذاشته‌ام می‌ماند؟

در آزمایش ما نه: کد ردیابی آزمایشی و CSS که در گزینه‌های خود سالینت بودند بعد از رفتن به آسترا در ۰ صفحه از ۱۲ بودند، با اینکه در پایگاه‌داده مانده بودند. قبل از تعویض آن‌ها را جای دیگری ذخیره کنید.

چرا بعد از تغییر قالب کدهای کوتاه به شکل متن خام دیده می‌شوند؟

کد کوتاه‌ها را افزونه‌های قالب قبلی می‌ساختند. در آزمایش ما با روشن بودن افزونه‌های سالینت صفحه اصلی بدون کد خام ساخته شد و با خاموش کردن آن‌ها ۲۵ تگ از شش کد کوتاه به شکل متن ماند.

اگر بعد از تغییر قالب مشکلی پیش آمد می‌شود به قالب قبلی برگشت؟

در آزمایش ما بله: بعد از برگشتن به سالینت همه فیلدهای ۱۲ صفحه، نقشه سایت و فید با خواندن اول یکی بود، چون تنظیمات قالب قبلی در پایگاه‌داده می‌ماند.

چرا کپی ساخته‌شده با WP Staging برگه ورود نشان می‌دهد؟

بازدیدکننده ناشناس روی کپی ما برگه ورود با برچسب noindex,follow دید. فیلتر wpstg.frontend.showLoginForm اگر true برگرداند این برگه را برمی‌دارد، و تنظیمات افزونه هم گزینه‌ای برای دسترسی همه بازدیدکنندگان دارد (در کد دیدیم، امتحان نکردیم).

تصویر سمانه جعفری
سمانه جعفری
پیشنهاد میکنیم این مقالات را هم بخوانید

دیدگاه یا پرسش خود را بنویسید