راهنمای جامع PWA در وردپرس

زمان لازم برای خواندن: حدود ۱۱ دقیقه
PWA در وردپرس

آیا می‌خواهید بدون اینکه کاربران مجبور باشند چیزی از اپ‌استور دانلود کنند، سایت وردپرسی شما مثل یک اپلیکیشن موبایل رفتار کند؟ این دقیقاً همان کاری است که یک ‌PWA انجام می‌دهد. در این مقاله با مفهوم PWA، مزایا و معایب آن، بهترین افزونه‌های رایگان PWA در وردپرس و همچنین روش فعال‌سازی دستی آن با کد آشنا می‌شوید.

فهرست مطالب

PWA چیست؟

برنامه وب پیش‌رونده یا Progressive Web App (به اختصار PWA)، یک تکنولوژی وب مدرن است که تجربه‌ای شبیه به اپلیکیشن بومی موبایل را از طریق مرورگر وب فراهم می‌کند. یک PWA از سه رکن اصلی تشکیل شده است:

  • مانیفِست: Web App Manifest، یک فایل JSON است که اطلاعات اپ مثل نام، آیکون و رنگ را تعریف می‌کند.
  • وُرکر: Service Worker، یک قطعه کد جاوااسکریپت است که در پس‌زمینه اجرا می‌شود و کش کردن و عملکرد آفلاین را مدیریت می‌کند.
  • گواهی SSL: پروتکل HTTPS سایت، بستر امن برای عملکرد درست Service Worker را فراهم می‌کند.

به زبان ساده، PWA به کاربران این امکان را می‌دهد که سایت شما را روی صفحه اصلی گوشی خود نصب کنند، حتی در حالت آفلاین از آن استفاده کنند و اعلان‌های پوش (push notifications) دریافت کنند؛ دقیقاً مثل یک اپلیکیشن واقعی، اما بدون نیاز به اپ‌استور!

آشنایی با پروتکل‌های HTTP و HTTPS

پروتکل‌های HTTP و HTTPS دو اسکیم مختلف URI مرتبط با HTTP هستند. در یک ارتباط HTTPS، ارتباط HTTP به‌شکل امن برقرار می‌شود تا محرمانگی و یکپارچگی داده‌ها تأمین و هویت سرور برای کلاینت احراز شود: تفاوت HTTP و HTTPS

چرا PWA در وردپرس؟

با گسترش استفاده از اینترنت همراه، تجربه کاربری در گوشی‌های هوشمند به یک فاکتور حیاتی برای موفقیت سایت تبدیل شده است. PWA در وردپرس پاسخ مستقیم به این نیاز است.

مزایای PWA در وردپرس

  • بارگذاری سریع‌تر در بازدیدهای مجدد: Service Worker می‌تواند منابع موردنیاز سایت را کش کند تا در مراجعه‌های بعدی، بخشی از آنها بدون دریافت دوباره از شبکه در دسترس باشند. البته میزان بهبود به استراتژی کش، منابع ذخیره‌شده و شرایط شبکه بستگی دارد؛ فعال‌سازی PWA به‌تنهایی سرعت بیشتر را تضمین نمی‌کند.
  • کارایی آفلاین: کاربران حتی بدون اینترنت می‌توانند صفحات از قبل بازدیدشده را ببینند.
  • نصب روی Home Screen: کاربران می‌توانند سایت را مثل یک اپ روی صفحه گوشی خود نصب کنند؛ بدون نیاز به اپ‌استور.
  • امکان بهبود SEO و Core Web Vitals: کش مناسب می‌تواند زمان دسترسی به برخی منابع را کاهش دهد، اما تأثیر آن بر عملکرد سایت باید اندازه‌گیری شود. معیارهای فعلی Core Web Vitals شامل LCP برای سرعت نمایش محتوای اصلی، INP برای پاسخ‌گویی به تعامل کاربر و CLS برای پایداری چیدمان هستند. نصب افزونه PWA به‌خودی‌خود بهبود این معیارها یا افزایش رتبه در گوگل را تضمین نمی‌کند.
  • پوش نوتیفیکیشن: ارسال اعلان مستقیم به کاربران حتی زمانی که مرورگر بسته است.
  • هزینه پایین‌تر نسبت به اپ بومی: نیازی به توسعه اپ جداگانه برای iOS و اندروید نیست.
  • نرخ تبدیل بهتر: تجربه کاربری روان‌تر منجر به ماندگاری بیشتر و فروش بیشتر می‌شود.

معایب و محدودیت‌های PWA

  • پشتیبانی محدود در iOS: سافاری بر روی آیفون پشتیبانی کامل‌تری از PWA نسبت به قبل دارد، اما هنوز محدودیت‌هایی مثل پوش نوتیفیکیشن در برخی نسخه‌ها وجود دارد.
  • دسترسی محدود به سخت‌افزار: PWA نمی‌تواند مثل یک اپ بومی به همه قابلیت‌های سخت‌افزاری (مثل بلوتوث یا NFC) دسترسی داشته باشد.
  • حجم کش: ذخیره‌سازی زیاد می‌تواند فضای حافظه دستگاه کاربر را اشغال کند.
  • نیاز به HTTPS: سایت شما حتماً باید گواهی SSL داشته باشد تا Service Worker کار کند.
  • عدم حضور در اپ‌استورها: کاربرانی که فقط از اپ‌استور یا گوگل‌پلی، اپ دانلود می‌کنند، PWA را از طریق این کانال‌ها پیدا نمی‌کنند.

بهترین افزونه رایگان PWA در وردپرس

برای وردپرس چندین افزونه PWA رایگان وجود دارد. در اینجا سه گزینه برتر را بررسی می‌کنیم:

۱) افزونه SuperPWA (پیشنهادی)

افزونه SuperPWA پرطرفدارترین و بهترین افزونه رایگان PWA در وردپرس است. با بیش از ۴۰,۰۰۰ نصب فعال و امتیاز ۴/۶، این افزونه تجربه‌ای ساده و قابل اعتماد ارائه می‌دهد:

  • راه‌اندازی در کمتر از ۱ دقیقه
  • تولید خودکار manifest.json و Service Worker
  • حذف تمیز: هیچ اثری در دیتابیس باقی نمی‌گذارد
  • سازگاری با تمام قالب‌ها و افزونه‌ها
  • پشتیبانی از UTM Tracking برای تحلیل ترافیک PWA

۲) افزونه PWA for WP

افزونه PWA for WP امکانات پیشرفته‌تری مثل صفحه آفلاین سفارشی، کش‌کردن محتوا و ادغام با AMP ارائه می‌دهد. با بیش از ۲۰,۰۰۰ نصب فعال، محبوبیت بالایی دارد. برخی ویژگی‌های پیشرفته افزونه نیاز به نسخه Pro آن دارد.

۳) افزونه PWA

افزونه PWA توسط بعضی از اعضای تیم هسته وردپرس توسعه یافته و بیشتر برای توسعه‌دهندگانی مناسب است که می‌خواهند Service Worker را به صورت ماژولار در قالب یا افزونه خود ادغام کنند. API انعطاف‌پذیری دارد اما برای کاربران معمولی پیچیده‌تر است.

فعال‌سازی PWA در وردپرس با افزونه

فعال‌سازی PWA در وردپرس با افزونه برای همه کاربران، حتی بدون دانش کدنویسی نیز مناسب است. مشابه سایر افزونه‌ها، وارد پیشخوان وردپرس شوید و به مسیر افزودن افزونه بروید. عبارت SuperPWA را جستجو، نصب و سپس فعال‌سازی کنید.

در تنظیمات افزونه، باید موارد زیر را تکمیل کنید:

  • Application Name: نام سایت شما
  • Application Short Name: نام کوتاه برای آیکون اپ (حداکثر ۱۲ کاراکتر)
  • Application Icon: آپلود آیکون با ابعاد ۵۱۲×۵۱۲ پیکسل
  • Splash Screen Icon: آیکون صفحه اسپلش (۱۹۲×۱۹۲ پیکسل)
  • Background Color: رنگ پس‌زمینه صفحه اسپلش
  • Theme Color: رنگ تم برای نوار مرورگر
  • Start Page: صفحه‌ای که پس از اجرای PWA باز می‌شود

بعد از ذخیره تنظیمات، به بخش Status بروید و مطمئن شوید همه موارد تیک سبز دارند.

تمام! وبسایت وردپرسی شما اکنون یک PWA است. برای تست، سایت را در مرورگر گوشی خود باز کنید. باید یک بنر «افزودن به صفحه اصلی» یا Add to Home Screen نمایش داده شود.

نصب PWA در وردپرس

فعال‌سازی دستی PWA در وردپرس

اگر می‌خواهید بدون نیاز به هیچ افزونه‌ای، کنترل کاملی روی PWA در وردپرس خود داشته باشید، این روش راه‌گشای شماست. این روش برای توسعه‌دهندگانی که با فایل‌های وردپرس آشنایی دارند مناسب است.

پیش‌نیازها

  • سایت شما حتماً باید روی HTTPS باشد (گواهی SSL فعال).
  • باید به FTP یا فایل منیجر هاست دسترسی داشته باشید.
  • باید به فایل functions.php قالب خود دسترسی داشته باشید.

گام ۱) ساخت فایل مانیفِست

در روت سایت (پوشه‌ای که wp-config.php در آن قرار دارد)، یک فایل به نام manifest.json بسازید و کد زیر را در آن قرار دهید:

{
  "name": "نام کامل سایت شما",
  "short_name": "نام کوتاه",
  "description": "توضیح کوتاه از سایت شما",
  "start_url": "/",
  "display": "standalone",
  "background_color": "#ffffff",
  "theme_color": "#0073aa",
  "icons": [
    {
      "src": "/pwa-icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png",
      "purpose": "any maskable"
    },
    {
      "src": "/pwa-icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any maskable"
    }
  ]
}

گام ۲) آماده‌سازی آیکون‌ها

یک پوشه به نام pwa-icons در روت سایت بسازید و دو تصویر با مشخصات زیر در آن قرار دهید:

  • icon-192.png — ابعاد دقیق ۱۹۲×۱۹۲ پیکسل
  • icon-512.png — ابعاد دقیق ۵۱۲×۵۱۲ پیکسل

توصیه می‌شود آیکون‌ها Maskable باشند؛ یعنی لبه‌های آیکون پدینگ داشته باشند تا در دستگاه‌های مختلف قطع نشوند. ابزار آنلاین maskable.app برای این کار رایگان است.

گام ۳) ساخت فایل وُرکر

در روت سایت، یک فایل به نام sw.js بسازید:

"use strict";

const CACHE_NAME = "my-wp-pwa-v1";
const OFFLINE_URL = "/offline/";

const PRE_CACHE_URLS = ["/", "/offline/"];

// install Service Worker and pre-cache important resources
self.addEventListener("install", (event) => {
  event.waitUntil(
    caches.open(CACHE_NAME).then((cache) => {
      return cache.addAll(PRE_CACHE_URLS);
    }),
  );
  self.skipWaiting();
});

// delete old caches when activating new Service Worker
self.addEventListener("activate", (event) => {
  event.waitUntil(
    caches.keys().then((cacheNames) => {
      return Promise.all(
        cacheNames.map((cacheName) => {
          if (cacheName !== CACHE_NAME) {
            return caches.delete(cacheName);
          }
        }),
      );
    }),
  );
  self.clients.claim();
});

// network first strategy for all GET requests, except admin, REST API and login pages
self.addEventListener("fetch", (event) => {
  // just handle GET requests, skip POST, PUT, DELETE etc.
  if (event.request.method !== "GET") return;

  // determine if the request is for admin, REST API or login pages
  const url = new URL(event.request.url);
  if (url.pathname.startsWith("/wp-admin") || url.pathname.startsWith("/wp-json") || url.pathname.startsWith("/wp-login")) {
    return;
  }

  event.respondWith(
    fetch(event.request)
      .then((response) => {
        // save a copy of the response in cache if it's valid
        if (response.status === 200) {
          const responseClone = response.clone();
          caches.open(CACHE_NAME).then((cache) => {
            cache.put(event.request, responseClone);
          });
        }
        return response;
      })
      .catch(() => {
        // return cached response if network fails, or show offline page if not in cache
        return caches.match(event.request).then((cached) => {
          if (cached) return cached;
          // show offline page for navigation requests
          return caches.match(OFFLINE_URL);
        });
      }),
  );
});

گام ۴) ساخت صفحه آفلاین

در پیشخوان وردپرس، یک برگه جدید با نامک offline بسازید. متنی مانند «شما در حال حاضر آفلاین هستید. لطفاً اینترنت خود را بررسی کنید.» در آن قرار دهید و آن را مطابق با سلیقه و طراحی خود، منتشر کنید.

گام ۵) ثبت مانیفست و ورکر در وردپرس

فایل functions.php قالب خود را باز کنید و کد زیر را به آن اضافه کنید. توصیه می‌شود به جای تغییر در قالب اصلی، این کار را با قالب فرزند (Child Theme) انجام دهید.

<?php
function my_pwa_add_manifest() {
  echo '<link rel="manifest" href="' . esc_url(home_url('/manifest.json')) . '">' . "\n";
  echo '<meta name="theme-color" content="#0073aa">' . "\n";
  echo '<meta name="mobile-web-app-capable" content="yes">' . "\n";
  echo '<meta name="apple-mobile-web-app-capable" content="yes">' . "\n";
  echo '<meta name="apple-mobile-web-app-status-bar-style" content="default">' . "\n";
  echo '<meta name="apple-mobile-web-app-title" content="' . esc_attr(get_bloginfo('name')) . '">' . "\n";
  echo '<link rel="apple-touch-icon" href="' . esc_url(home_url('/pwa-icons/icon-192.png')) . '">' . "\n";
}
add_action('wp_head', 'my_pwa_add_manifest');

function my_pwa_register_sw() {
  // not allowed to load on admin pages
  if (is_admin()) return;
?>
  <script>
    if ('serviceWorker' in navigator) {
      window.addEventListener('load', function() {
        navigator.serviceWorker.register('/sw.js', {
            scope: '/'
          })
          .then(function(registration) {
            console.log('PWA: Service Worker registered.', registration.scope);
          })
          .catch(function(error) {
            console.log('PWA: Error Registering Service Worker:', error);
          });
      });
    }
  </script>
<?php
}
add_action('wp_footer', 'my_pwa_register_sw');

گام ۶) تنظیم دسترسی

اگر وب‌سرور میزبان شما از آپاچی استفاده می‌کند، فایل .htaccess روت سایت را باز کنید و قبل از بلاک شروع وردپرس، این خطوط را اضافه کنید:

# PWA Block
<FilesMatch "manifest\.json$">
    Header set Content-Type "application/manifest+json"
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

<FilesMatch "sw\.js$">
    Header set Service-Worker-Allowed "/"
    Header set Cache-Control "no-cache"
</FilesMatch>

اگر از وب‌سرور Nginx استفاده می‌کنید، موارد زیر را به کانفیگ سرور اضافه کنید:

location = /manifest.json {
    add_header Content-Type application/manifest+json;
    add_header Access-Control-Allow-Origin *;
}

location = /sw.js {
    add_header Service-Worker-Allowed /;
    add_header Cache-Control no-cache;
}

گام ۷) تست و بررسی PWA

پس از انجام همه مراحل، PWA را با روش‌های زیر تست کنید:

  1. مرورگر کروم را باز کنید و به سایت مدنظر بروید.
  2. کلید F12 را بزنید تا DevTools مرورگر باز شود.
  3. به تب Application بروید.
  4. در منوی سمت چپ، روی Manifest کلیک کنید. باید اطلاعات فایل manifest.json نمایش داده شود.
  5. روی Service Workers کلیک کنید. باید وضعیت activated and running نشان دهد.
  6. در تب Lighthouse، یک آدیت PWA اجرا کنید و نمره را ببینید.

نکات مهم و رفع مشکلات رایج

  • Service Worker کار نمی‌کند: مطمئن شوید سایت شما HTTPS دارد. بدون گواهی SSL معتبر، Service Worker اصلاً ثبت نخواهد شد.
  • manifest.json پیدا نمی‌شود: مطمئن شوید فایل در روت سایت (همان پوشه wp-config.php) قرار دارد، نه داخل پوشه قالب.
  • آیکون‌ها نمایش داده نمی‌شوند: در DevTools مرورگر به Application > Manifest بروید. اخطارهای دقیق خطا را نشان می‌دهد.
  • تغییرات SW اعمال نمی‌شود: هر بار که sw.js را تغییر می‌دهید، مقدار CACHE_NAME را تغییر دهید (مثلاً v1 به v2) تا کاربران کش قدیمی را دور بزنند.
  • کاربران لاگین‌شده مشکل دارند: در کد sw.js، مسیرهای wp-admin و wp-login را از کش حذف شده‌اند. اما اگر مشکل ادامه داشت، کوکی‌های احراز هویت را از استراتژی کش خارج کنید.

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

  1. آیا PWA با تمام قالب‌های وردپرس سازگار است؟

    بله، PWA یک لایه مستقل از قالب وردپرس است. افزونه‌هایی مثل SuperPWA با تمام قالب‌های استاندارد سازگار هستند. در روش دستی هم، Service Worker در سطح سرور کار می‌کند و به قالب وابسته نیست.

  2. آیا PWA سرعت سایت را کاهش می‌دهد؟

    تأثیر PWA به نحوه پیاده‌سازی آن بستگی دارد. کش درست می‌تواند بارگذاری منابع را در بازدیدهای مجدد سریع‌تر کند، اما اسکریپت‌های اضافی، پیش‌کش‌کردن منابع غیرضروری یا استراتژی نامناسب ممکن است سربار ایجاد کنند. در اولین بازدید نیز نباید انتظار داشت منابع از قبل در کش Service Worker موجود باشند.

  3. آیا کاربران آیفون هم می‌توانند PWA نصب کنند؟

    بله، اما با محدودیت‌هایی! در مرورگر سافاری iOS می‌توانند از منوی Share گزینه «Add to Home Screen» را انتخاب کنند. از iOS نسخه 16.4 به بعد، پوش نوتیفیکیشن هم پشتیبانی می‌شود. با این حال تجربه آیفون هنوز به کامل بودن PWA روی اندروید نمی‌رسد.

  4. PWA با ووکامرس هم کار می‌کند؟

    بله. هر دو روش (افزونه و دستی) فعال‌سازی PWA در وردپرس با ووکامرس سازگار هستند. در روش دستی دقت کنید که صفحات checkout و cart را از کش خارج کنید تا کاربران همیشه نسخه زنده آن‌ها را ببینند. خط مربوطه در کد sw.js این کار را انجام می‌دهد.

  5. آیا PWA بر سئو سایت تأثیر مثبت دارد؟

    PWA به‌تنهایی امتیاز ویژه‌ای برای رتبه‌بندی در گوگل ایجاد نمی‌کند. اگر پیاده‌سازی آن به بهبود قابل‌اندازه‌گیری تجربه کاربری کمک کند، می‌تواند در کنار سایر اقدامات بهینه‌سازی مفید باشد. بااین‌حال، نصب‌پذیری سایت یا فعال‌شدن Service Worker، مدرک بهبود Core Web Vitals نیست.

فعال‌سازی PWA در وردپرس می‌تواند امکاناتی مثل نصب سایت روی دستگاه و دسترسی آفلاین به محتوای مشخص را فراهم کند. ارزش این امکانات به نیاز کاربران و کیفیت پیاده‌سازی بستگی دارد. برای ارزیابی نتیجه، علاوه بر نصب‌پذیری، رفتار کش، نمایش محتوای به‌روز و عملکرد سایت در بازدید اول و مراجعه مجدد را بررسی کنید.

اگر می‌خواهید سریع شروع کنید، افزونه SuperPWA را نصب کنید و در کمتر از ۵ دقیقه سایت خود را PWA کنید. اگر توسعه‌دهنده وردپرس هستید و کنترل کامل می‌خواهید، روش دستی را با استفاده از کدهای ارائه شده در این مقاله پیاده‌سازی کنید.


آخرین به‌روزرسانی: ۳۰ مهر ۱۴۰۵ | برچسب‌ها: -

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مشاوره رایگان

علاقمند به یادگیری طراحی سایت یا دنبال مشاوره در این زمینه هستی؟