smnandre / pagespeed-api
PageSpeed Insight PHP Api Client π Analyse web pages for performances metrics, core web vitals...
Fund package maintenance!
Requires
- php: >=8.3
- symfony/http-client: ^7.0 || ^8.0
- webmozart/assert: ^1.11 || ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.56
- phpstan/phpstan: ^2.1
- phpstan/phpstan-webmozart-assert: ^2.0
- phpunit/phpunit: ^12
README
This PHP library offers an effortless way to leverage Google's PageSpeed Insights API.
Analyze your web pages for performance metrics, get detailed reports, and optimize your site with ease. π
Installation
composer require smnandre/pagespeed-api
Usage
Initialize the API
use PageSpeed\Api\PageSpeedApi; $pageSpeedApi = new PageSpeedApi(); // or with API key (optional) $pageSpeedApi = new PageSpeedApi('YOUR_API_KEY');
Run analysis
// Analyze a page $analysis = $pageSpeedApi->analyse('https://example.com/'); // ...with a specific strategy (mobile or desktop) $analysis = $pageSpeedApi->analyse('https://example.com/', 'mobile'); // ...with a specific locale (e.g., fr_FR) $analysis = $pageSpeedApi->analyse('https://example.com/', locale: 'fr_FR'); // ...with a specific category (performance, accessibility, best-practices, seo) $analysis = $pageSpeedApi->analyse('https://example.com/', categories: 'performance');
Parameters
| Parameter | Description | Default |
|---|---|---|
url |
The URL of the page to analyze. | - |
strategy |
The analysis strategy to use. Possible values are mobile or desktop. |
mobile |
locale |
The locale to use for the analysis. | en |
categories |
The categories to analyze. If not specified, all categories will be analyzed. | - |
Report
A display-ready view of an analysis: category scores and Core Web Vitals reached by property, serialisable to array or JSON.
use PageSpeed\Api\PageSpeedApi; $pageSpeedApi = new PageSpeedApi(); $report = $pageSpeedApi->analyse('https://www.example.com')->report(); // Scores (null when the category was not analysed) $report->performance->value; // 88 $report->performance->rating; // Rating::NeedsImprovement $report->performance->rating->value; // 'needs-improvement' $report->seo->value; // 90 // Core Web Vitals (null when field data is unavailable) $report->lcp->value; // 2300 $report->lcp->unit; // 'ms' $report->lcp->rating; // Bucket::Fast // Serialise for a template, a CLI or an API $report->toArray(); json_encode($report);
Scores (performance, accessibility, bestPractices, seo) expose value (0-100),
rating (a Rating following the Score Evaluation thresholds), and
category (Category). Metrics (lcp, cls, inp, fcp, fid, ttfb) expose value,
unit, and rating (a Bucket: Fast, Average or Slow). Any property is null when
the underlying data is absent.
Audit Scores
use PageSpeed\Api\PageSpeedApi; $pageSpeedApi = new PageSpeedApi(); $analysis = $pageSpeedApi->analyse('https://www.example.com'); $scores = $analysis->getAuditScores(); // array ( // 'performance' => 100, // 'accessibility' => 88, // 'best-practices' => 100, // 'seo' => 90, // )
Audit categories
| # | Category | Description |
|---|---|---|
| β‘ | Performance | Measures how quickly the content on your page loads and becomes interactive. |
| π | Accessibility | Evaluates how accessible your page is to users, including those with disabilities. |
| π | Best Practices | Assesses your page against established web development best practices. |
| β | SEO | Analyzes your page's search engine optimization, ensuring it follows SEO guidelines. |
Score Evaluation
| Min | Max | β¬οΈ | Description |
|---|---|---|---|
| 0 | 49 | π₯π₯π₯π₯π₯β¬οΈβ¬οΈβ¬οΈβ¬οΈβ¬οΈ | Poor |
| 50 | 89 | π§π§π§π§π§π§π§π§π§οΈβ¬οΈοΈ | Needs improvement |
| 90 | 100 | π©π©π©π©π©π©π©π©π©π© | Good |
Core Web Vitals
Loading Metrics
use PageSpeed\Api\PageSpeedApi; $pageSpeedApi = new PageSpeedApi(); $analysis = $pageSpeedApi->analyse('https://www.example.com'); $metrics = $analysis->getLoadingMetrics(); // array ( // 'CUMULATIVE_LAYOUT_SHIFT_SCORE' => 'FAST', // 'EXPERIMENTAL_TIME_TO_FIRST_BYTE' => 'AVERAGE', // 'FIRST_CONTENTFUL_PAINT_MS' => 'FAST', // 'FIRST_INPUT_DELAY_MS' => 'FAST', // 'INTERACTION_TO_NEXT_PAINT' => 'FAST', // 'LARGEST_CONTENTFUL_PAINT_MS' => 'FAST', // )
Main Metrics
| Abbr | Metric | Description |
|---|---|---|
| FCP | First Contentful Paint | Time taken for the first piece of content to appear on the screen. |
| SI | Speed Index | How quickly the contents of a page are visibly populated. |
| FID | First Input Delay | Time from a user's first interaction to when the browser can respond. |
| CLS | Cumulative Layout Shift | Measure of visual stability; the sum of all individual layout shift scores. |
| LCP | Largest Contentful Paint | Time taken for the largest content element to appear. |
| INP | Interaction to Next Paint | Time from a user interaction to the next visual update in response. |
Contributing
Contributions are welcome! If you would like to contribute, please fork the repository and submit a pull request.
License
The MIT License (MIT). Please see License File for more information.

