فحص سرعة الصفحات (PageSpeed Insights API) لجميع روابط الموقع آلياً
فحص سرعة الصفحات لجميع روابط الموقع آلياً: لماذا هذه الخطوة محورية؟
عندما يكبر الموقع إلى عشرات أو مئات أو آلاف الصفحات، يصبح فحص الأداء يدوياً عبر واجهة PageSpeed Insights مهمة بطيئة وغير عملية. هنا تظهر قيمة الأتمتة الحقيقية: تحويل عملية القياس من فحص صفحة واحدة إلى نظام دوري يمر على جميع الروابط، يسجل النتائج، ويرصد التراجع قبل أن يتحول إلى مشكلة تؤثر على تجربة المستخدم أو الظهور العضوي.
هذا النوع من المشاريع يمثل امتداداً عملياً لما ناقشناه في مدخل إلى عالم أتمتة الـ SEO: لماذا الآن؟، لأن السرعة لم تعد مجرد تحسين تقني ثانوي، بل عامل تشغيلي يتقاطع مع الزحف، والتحويل، وتجربة المستخدم، وحتى كفاءة الإنفاق على المحتوى والإعلانات.
الفكرة الأساسية بسيطة: نجمع روابط الموقع، نرسل طلبات إلى PageSpeed Insights API، نستخرج مؤشرات مهمة مثل performance score وLargest Contentful Paint وCumulative Layout Shift، ثم نخزن النتائج في ملف تحليلي قابل للتصفية والمقارنة.
ما الذي تحتاجه قبل بناء سكربت الفحص؟
لإنجاز هذا المشروع بشكل احترافي، تحتاج إلى بيئة عمل منظمة ومفتاح وصول صالح من Google. إذا لم تكن قد جهزت الأساس بعد، فراجع تهيئة بيئة العمل: تثبيت Python والمكتبات الأساسية، ثم التعامل مع Google Cloud Console وإنشاء مفاتيح الـ API لفهم طريقة إنشاء المفتاح وربطه بالمشروع الصحيح.
كذلك من الضروري فهم كيفية تبادل البيانات بصيغة JSON، لأن الاستجابة القادمة من الواجهة البرمجية تعتمد عليها بالكامل. لهذا يفيدك الرجوع إلى أساسيات التعامل مع ملفات JSON (لغة التفاهم بين الأنظمة)، وكذلك مفهوم الـ API: كيف نطلب البيانات من Google وOpenAI.
المكونات الأساسية للمشروع
- ملف يحتوي على جميع روابط الموقع، مثل
urls.txtأوCSV. - مفتاح
API Keyصالح. - مكتبات بايثون مثل
requestsوpandas. - خطة واضحة لكيفية تخزين النتائج ومقارنتها عبر الوقت.
من أين نجلب جميع روابط الموقع؟
أفضل سيناريو هو جلب الروابط من ملف sitemap.xml، لأنه غالباً يعكس البنية الرسمية للموقع. وإذا كان موقعك ديناميكياً أو كبيراً، فمقال أتمتة إنشاء ملفات الـ Sitemap للمواقع الديناميكية يقدم أساساً ممتازاً لبناء تدفق متكامل.
يمكنك أيضاً دمج هذه العملية مع بيانات أخرى، مثل تقارير الزحف أو الصفحات ذات الأولوية العالية في Google Search Console، خاصة إذا كنت تريد فحص الصفحات التي تجلب الزيارات فعلاً قبل غيرها.
بنية الطلب إلى PageSpeed Insights API
الرابط الأساسي للطلب يكون عادة عبر نقطة النهاية https://www.googleapis.com/pagespeedonline/v5/runPagespeed. نمرر معه الصفحة المطلوبة، ونوع الجهاز مثل mobile أو desktop، ومفتاح الواجهة.
عملياً، أهم ما سنستخرجه من الاستجابة هو البيانات التي تساعد القرار، لا كل الحقول. التركيز الذكي يكون على:
performance_scorefirst_contentful_paintlargest_contentful_paintspeed_indextotal_blocking_timecumulative_layout_shift
سكربت Python لفحص جميع الروابط وحفظ النتائج
السكريبت التالي يقرأ الروابط من ملف نصي، يرسل الطلبات إلى الواجهة البرمجية، ثم يحفظ النتائج في ملف CSV. هذا يسهّل لاحقاً استخدام استخدام مكتبة Pandas لتحليل بيانات الـ SEO الضخمة لاكتشاف الأنماط والمشكلات المتكررة.
import requests
import pandas as pd
import time
API_KEY = "YOUR_API_KEY"
INPUT_FILE = "urls.txt"
OUTPUT_FILE = "pagespeed_results.csv"
STRATEGY = "mobile"
API_ENDPOINT = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed"
def get_pagespeed_data(url):
params = {
"url": url,
"strategy": STRATEGY,
"key": API_KEY
}
try:
response = requests.get(API_ENDPOINT, params=params, timeout=90)
response.raise_for_status()
data = response.json()
lighthouse = data.get("lighthouseResult", {})
audits = lighthouse.get("audits", {})
categories = lighthouse.get("categories", {})
result = {
"url": url,
"strategy": STRATEGY,
"performance_score": categories.get("performance", {}).get("score"),
"first_contentful_paint": audits.get("first-contentful-paint", {}).get("displayValue"),
"largest_contentful_paint": audits.get("largest-contentful-paint", {}).get("displayValue"),
"speed_index": audits.get("speed-index", {}).get("displayValue"),
"total_blocking_time": audits.get("total-blocking-time", {}).get("displayValue"),
"cumulative_layout_shift": audits.get("cumulative-layout-shift", {}).get("displayValue"),
"time_to_interactive": audits.get("interactive", {}).get("displayValue")
}
return result
except requests.exceptions.RequestException as e:
return {
"url": url,
"strategy": STRATEGY,
"error": str(e)
}
def main():
with open(INPUT_FILE, "r", encoding="utf-8") as file:
urls = [line.strip() for line in file if line.strip()]
results = []
for url in urls:
print(f"Checking: {url}")
result = get_pagespeed_data(url)
results.append(result)
time.sleep(1)
df = pd.DataFrame(results)
df.to_csv(OUTPUT_FILE, index=False, encoding="utf-8-sig")
print(f"Saved results to {OUTPUT_FILE}")
if __name__ == "__main__":
main()
كيف تجعل السكربت أكثر موثوقية على المواقع الكبيرة؟
في المشاريع الحقيقية، لا يكفي أن يعمل السكربت مرة واحدة. المطلوب أن يكون قابلاً للإعادة، مستقراً، وسهل الصيانة. وهنا يظهر دور منطق البرمجة المعتمد على المهام (Task-Oriented Programming) في تقسيم العملية إلى مراحل واضحة: قراءة الروابط، إرسال الطلب، معالجة الخطأ، حفظ النتيجة، ثم إعادة المحاولة عند الحاجة.
تحسينات عملية مهمة
- أضف آلية
retryعند فشل الطلبات المؤقت. - احفظ النتائج تدريجياً بدلاً من الانتظار حتى نهاية التشغيل.
- افصل تقارير
mobileعنdesktop. - أضف عمود تاريخ تشغيل مثل
run_dateللمقارنة الزمنية. - استثنِ الصفحات غير المهمة مثل الوسوم الداخلية أو نتائج البحث إن لم تكن ضمن أولوياتك.
لا تتعامل مع نتائج
PageSpeed Insights APIكأرقام للعرض فقط. القيمة الحقيقية تظهر عندما تربط كل نتيجة بنوع الصفحة، القالب المستخدم، وحجم الزيارات، لتعرف أين تبدأ الإصلاح فعلاً.
تخزين النتائج في Google Sheets أو لوحات تقارير
إذا كنت تفضل مشاركة النتائج مع فريق التحرير أو التطوير، فيمكن دفع البيانات إلى Google Sheets بدلاً من الاكتفاء بملف محلي. هنا يفيدك الربط مع مقدمة في Google Apps Script لغير المبرمجين وكيفية ربط Google Sheets بالعالم الخارجي عبر Script لبناء لوحة متابعة شبه فورية.
كما يمكنك دمج التقرير مع بيانات الزحف، أو نتائج تحليل الـ Meta Tags لآلاف الصفحات بضغطة زر، أو حتى تقارير استخدام Python لفحص الروابط المعطلة (404) في المواقع الكبيرة لتكوين طبقة رقابية واحدة تغطي الصحة التقنية للموقع بالكامل.
الجوانب الأمنية التي لا يجب تجاهلها
من أكثر الأخطاء شيوعاً وضع API Key مباشرة داخل المستودع أو ملفات العمل المشتركة. الأفضل تخزين المفتاح داخل متغيرات بيئة مثل environment variables أو ملف محلي مستثنى من النشر. ولتطبيق ذلك وفق ممارسات سليمة، راجع الحماية والأمان: كيف تخفي مفاتيحك السرية في الكود؟.
كيف تقرأ النتائج من منظور SEO لا من منظور تقني فقط؟
الخطأ الشائع هو ملاحقة درجة 100/100 لكل الصفحات. عملياً، الأهم هو اكتشاف الصفحات التي تنخفض فيها المؤشرات الأساسية بشكل يؤثر على الصفحات المهمة تجارياً أو المحتوى الذي يجلب زيارات عضوية مستمرة.
لهذا أنصح بترتيب النتائج وفق:
- الصفحات الأعلى زيارات.
- الصفحات الأعلى تحويلاً.
- الصفحات ذات القوالب المشتركة التي إذا أصلحتها انعكس الأثر على عدد كبير من الروابط.
- الصفحات التي تدهورت مقارنة بالتشغيل السابق.
هذا النهج يحول التقرير من ملف أرقام إلى أداة قرار. وهنا تتجلى قيمة الأتمتة الحقيقية: ليس فقط جمع البيانات، بل ترتيب الأولويات تلقائياً وتوجيه فريقك إلى أكثر الصفحات التي تستحق الإصلاح أولاً.
خاتمة
فحص جميع روابط الموقع عبر PageSpeed Insights API هو خطوة متقدمة تجمع بين الأتمتة، التحليل، وتحسين الأداء على نطاق واسع. كلما كان موقعك أكبر، زادت أهمية الانتقال من الفحص اليدوي إلى نظام يعمل بشكل دوري، ويحفظ النتائج، وينبهك إلى التراجع قبل أن يؤثر على الزحف أو تجربة المستخدم أو العائد.
وعندما تبني هذا التدفق بشكل صحيح، فأنت لا تنشئ سكربتاً فقط، بل تؤسس طبقة مراقبة تقنية قابلة للتوسع، يمكن لاحقاً ربطها بباقي مشاريع الأتمتة في السيو، من الكلمات المفتاحية إلى الروابط والبيانات البنيوية. هذه هي العقلية التي تصنع فرقاً حقيقياً في المواقع التي تُدار باحتراف.
3 comments