הגדרת ניטור אוטומטי של Core Web Vitals

טעינת עמוד איטית מרחיקה מבקרים ופוגעת בדירוג החיפוש, אך בדיקות חד-פעמיות אינן חושפות את התמונה האמיתית. אנו מגדירים ניטור אוטומטי של Core Web Vitals העוקב אחר LCP, INP ו-CLS על סמך נתוני משתמשים אמיתיים. הצוות שלנו מספק פתרון סוהר—משילוב CrUX API ואוטומציה של Lighthouse ועד להמחשת מגמות ותמיכה מתמשכת.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת ניטור אוטומטי של Core Web Vitals
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

הגדרת ניטור אוטומטי של Core Web Vitals

אנו מתמחים בהקמת ניטור רציף של חוויית העמוד — LCP, INP ו-CLS, שהם חלק מאותות הדירוג של Google. חשוב מכך, הם מתקשרים ישירות להמרות: כל עיכוב של 100ms ב-LCP מפחית המרות בכ-1% (Google Web Vitals). עבור חנות עם הכנסות של $1M בחודש, מדובר בהפסד של $10k. באופן דומה, CLS גבוה מעלה את שיעור הנטישה ב-15-20%. הניטור חייב להיות רציף, לא בדיקה חד-פעמית. להלן הגישה שלנו לבניית מערכת הכוללת מדדים סינתטיים ומדדים ממשתמשים אמיתיים, בדיקות אוטומטיות ב-CI/CD, והצגת מגמות.

תהליך חמשת השלבים המוכח שלנו מבטיח כיסוי מקיף:

  1. הגדרת CrUX API לאיסוף נתוני שטח ממשתמשים אמיתיים.
  2. אוטומציה של הרצות Lighthouse לאחר פריסה למשוב מעבדתי מיידי.
  3. אחסון כל המדדים ב-PostgreSQL עם מטא-דאטה של פריסה.
  4. הגדרת בדיקות תקציב ב-CI/CD שמכשילות את הצינור על רגרסיות.
  5. בניית לוח מחוונים ב-Grafana לניתוח מגמות והתראות.

עם ניסיון של למעלה מ-15 שנים ויותר מ-500 פריסות ניטור מוצלחות ברחבי העולם, אנו מבטיחים מעקב ביצועים חזק ואמין.

איך משווים נתוני Lab לעומת Field?

נתוני Lab — Lighthouse, משתמש מדומה, סביבה יציבה. רצים לאחר כל פריסה, נותנים משוב מיידי. נתוני Field — CrUX (Chrome UX Report), נתוני משתמשי Chrome אמיתיים במשך 28 ימים. זמינים דרך PSI API ו-CrUX API. משקפים חוויית עולם אמיתי — כוללים מכשירים איטיים, רשתות חלשות, טעינות עם/בלי מטמון.

הפער ביניהם הוא נורמלי. Lab LCP = 1.8s, field LCP = 3.1s. זה לא אומר שהמדידות שגויות: משתמשים אמיתיים הגיעו מחיבורי השהיה גבוהה במכשירים זולים. נתוני שטח משקפים בצורה מדויקת יותר את החוויה האמיתית — ההבדל יכול להגיע לפי 2-3, כך שהסתמכות רק על בדיקות סינתטיות היא מסוכנת. למעשה, נתוני שטח מתואמים פי 3 יותר עם שיעורי המרה מאשר נתוני Lab בלבד. בדיקות Lab מהירות פי 100 מרכישת נתוני CrUX (שניות לעומת ימים).

איך לאסוף נתוני שטח דרך CrUX API?

Google מספקת את CrUX API בחינם עם מפתח Cloud Console. דוגמת קוד Python להבאת נתונים:

import requests

CRUX_API_URL = 'https://chromeuxreport.googleapis.com/v1/records:queryRecord'

def fetch_crux(url: str, api_key: str, form_factor: str = 'PHONE') -> dict:
    payload = {
        'url': url,
        'formFactor': form_factor,  # PHONE, DESKTOP, TABLET
        'metrics': [
            'largest_contentful_paint',
            'cumulative_layout_shift',
            'interaction_to_next_paint',
            'first_contentful_paint',
            'experimental_time_to_first_byte',
        ],
    }
    resp = requests.post(
        f'{CRUX_API_URL}?key={api_key}',
        json=payload,
        timeout=30,
    )
    if resp.status_code == 404:
        return {'error': 'insufficient_data', 'url': url}
    resp.raise_for_status()
    return resp.json()

def parse_crux_metrics(crux_data: dict) -> dict:
    record = crux_data.get('record', {})
    metrics = record.get('metrics', {})

    def extract(key):
        m = metrics.get(key, {})
        histo = m.get('histogram', [])
        p75 = m.get('percentiles', {}).get('p75')
        return {'p75': p75, 'histogram': histo}

    return {
        'lcp': extract('largest_contentful_paint'),
        'cls': extract('cumulative_layout_shift'),
        'inp': extract('interaction_to_next_paint'),
        'fcp': extract('first_contentful_paint'),
        'ttfb': extract('experimental_time_to_first_byte'),
    }

בדיקות Lab אוטומטיות עם Lighthouse

לזיהוי רגרסיות בזמן אמת לאחר פריסה, אנו משתמשים ב-Node.js CLI או ב-API פרוגרמטי:

// monitor.js
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
const fs = require('fs');

async function runLighthouse(url, options = {}) {
  const chrome = await chromeLauncher.launch({ chromeFlags: ['--headless'] });
  const opts = {
    port: chrome.port,
    onlyCategories: ['performance'],
    formFactor: options.formFactor || 'mobile',
    throttlingMethod: 'simulate',
    ...options,
  };
  const runnerResult = await lighthouse(url, opts);
  await chrome.kill();
  const { lhr } = runnerResult;
  const audits = lhr.audits;
  return {
    score: lhr.categories.performance.score,
    lcp: audits['largest-contentful-paint'].numericValue,
    fcp: audits['first-contentful-paint'].numericValue,
    tbt: audits['total-blocking-time'].numericValue,
    cls: audits['cumulative-layout-shift'].numericValue,
    tti: audits['interactive'].numericValue,
    speed_index: audits['speed-index'].numericValue,
    server_response_time: audits['server-response-time'].numericValue,
  };
}

// Запуск для нескольких страниц
const pages = [
  'https://example.com/',
  'https://example.com/catalog/',
  'https://example.com/product/1/',
];

(async () => {
  const results = [];
  for (const url of pages) {
    const mobile = await runLighthouse(url, { formFactor: 'mobile' });
    const desktop = await runLighthouse(url, { formFactor: 'desktop' });
    results.push({ url, mobile, desktop, timestamp: new Date().toISOString() });
  }
  fs.writeFileSync('cwv_results.json', JSON.stringify(results, null, 2));
})();

אינטגרציית CI/CD עם בדיקות תקציב

לאחר פריסה, בדיקה אוטומטית שמכשילה את הצינור על ירידה בביצועים:

---
# .github/workflows/cwv-check.yml
name: Core Web Vitals Check
on:
  deployment_status:
jobs:
  cwv:
    if: github.event.deployment_status.state == 'success'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Install dependencies
        run: npm install lighthouse chrome-launcher
      - name: Run CWV check
        run: |
          node scripts/cwv-check.js \
            --url ${{ github.event.deployment_status.environment_url }} \
            --budget '{"performance": 0.7, "lcp": 4000, "cls": 0.1, "tbt": 600}'
        env:
          FAIL_ON_REGRESSION: 'true'
---
// scripts/cwv-check.js
const args = require('minimist')(process.argv.slice(2));
const budget = JSON.parse(args.budget);
runLighthouse(args.url).then(result => {
  const failures = [];
  if (result.score < budget.performance) failures.push(`Performance score ${result.score} < ${budget.performance}`);
  if (result.lcp > budget.lcp) failures.push(`LCP ${result.lcp}ms > ${budget.lcp}ms`);
  if (result.cls > budget.cls) failures.push(`CLS ${result.cls} > ${budget.cls}`);
  if (result.tbt > budget.tbt) failures.push(`TBT ${result.tbt}ms > ${budget.tbt}`);
  if (failures.length > 0) {
    console.error('CWV check FAILED:\n' + failures.join('\n'));
    if (process.env.FAIL_ON_REGRESSION === 'true') process.exit(1);
  } else {
    console.log('CWV check passed.');
  }
});

אחסון נתונים והצגת מגמות

כל התוצאות מאוחסנות ב-PostgreSQL עם קישור לפריסה:

CREATE TABLE cwv_snapshots (
    id SERIAL PRIMARY KEY,
    url TEXT NOT NULL,
    source VARCHAR(20) NOT NULL, -- 'lighthouse' или 'crux'
    form_factor VARCHAR(10) NOT NULL, -- 'mobile', 'desktop'
    measured_at TIMESTAMP NOT NULL,
    -- Core Web Vitals
    lcp_ms INTEGER,
    cls NUMERIC(6,4),
    inp_ms INTEGER,
    fcp_ms INTEGER,
    ttfb_ms INTEGER,
    -- Lighthouse-only
    performance_score NUMERIC(4,2),
    tbt_ms INTEGER,
    tti_ms INTEGER,
    speed_index_ms INTEGER,
    -- Метаданные
    deploy_id TEXT,
    commit_sha TEXT
);

אחסון commit SHA עם כל מדידה מאפשר לאתר איזו פריסה שברה את המדדים. על גבי מסד נתונים זה, אנו בונים לוח מחוונים ב-Grafana המציג מגמות שבועיות עם סמני פריסה, כך שלקוחות יכולים לעקוב אחר הדינמיקה באופן עצמאי. התראות ב-Telegram/Slack מודיעות לצוותים מיד כאשר חריגים ספים.

מהם הספים של Core Web Vitals?

ההנחיות של Google (נתוני שטח p75):

מדד טוב דורש שיפור גרוע
LCP ≤ 2.5s 2.5–4.0s > 4.0s
CLS ≤ 0.1 0.1–0.25 > 0.25
INP ≤ 200ms 200–500ms > 500ms

לניטור מעבדתי אנו משתמשים בספים מחמירים יותר (LCP ≤ 3.0s, TBT ≤ 500ms) תוך התחשבות בפער בין נתוני Lab לשטח. בעת הגדרת ספי CI/CD, אנו ממליצים על מרווח ביטחון של 10-20% מעל יעדי השטח כדי למנוע חיובי שווא.

מקרה בוחן מעולם האמיתי: בפרויקט אחרון עם אחד מלקוחותינו, חנות מסחר אלקטרוני מובילה עם יותר מ-40 עמודים ומיליון ביקורים חודשיים, פרסנו את המערכת שתוארה לעיל. ה-LCP הראשוני בשטח (p75) היה 3.1s במובייל, בעוד שב-Lab הוצג 1.8s. על ידי ניתוח נתוני המשתמשים האמיתיים גילינו שתמונת הגיבור נטענה ללא עדיפות וסקריפטים של צד שלישי חסמו את הרינדור. לאחר יישום אופטימיזציית תמונות וטעינה אסינכרונית, ה-LCP בשטח ירד ל-2.3s תוך שבועיים, מה ששיפר ישירות את שיעור ההמרה ב-8% — הכנסה חודשית נוספת של $80,000 עבור הלקוח.

מה כלול בעבודה

אנו מספקים:

  • תיעוד מקיף של ארכיטקטורת הניטור והוראות למפתחים.
  • גישה ללוח המחוונים ב-Grafana ולנתונים היסטוריים.
  • הדרכת צוות על פירוש מדדים ותגובה להתראות.
  • שבועיים של תמיכה לאחר היישום — התאמת ספים, לוחות מחוונים והתראות.

הצוות שלנו של מהנדסי ביצועי אתר מוסמכים (ניסיון משולב של 15+ שנים) מבטיח אינטגרציה חלקה עם זרימות העבודה הקיימות שלכם.

השוואת נתוני Lab לעומת Field

פרמטר Lab (Lighthouse) Field (CrUX)
מהירות רכישה שניות עד 28 ימים
תנאי עולם אמיתי לא כן
חזרתיות גבוהה בינונית
מקרה שימוש CI/CD, משוב מהיר מגמות, התראות ייצור

נתוני שטח משקפים טוב יותר את החוויה האמיתית, אך בדיקות סינתטיות מהירות פי 100. האסטרטגיה האופטימלית משלבת את שני המקורות.

לוחות זמנים

הקמת CrUX API + Lighthouse + אחסון PostgreSQL + לוח מחוונים ב-Grafana — 3–4 ימי עבודה. אינטגרציית CI/CD עם כשל תקציב — יום נוסף אחד. התראות ב-Telegram/Slack על ירידה במדדי שטח — 0.5–1 יום נוספים.

צרו קשר כדי לדון בפרטי הפרויקט שלכם ולבחור את תצורת הניטור האופטימלית. בקשו ייעוץ כדי לקבל הערכה עבור האתר שלכם.