Saltar al contenido
← Volver a proyectos

Laravel Semrush

A lightweight Semrush Analytics API client for Laravel — domain analytics, keyword research, and backlinks.

Laravel Semrush

#Laravel Semrush

Tests PHPStan Code Style Latest Version on Packagist Total Downloads License

A lightweight Semrush Analytics API client for Laravel. It wraps the domain, keyword and backlink reports behind a small Semrush client/facade, threads your API key, and decodes the ;-separated CSV export into plain associative rows — no DTOs, no response wrappers.

#Features

  • Domain overviewdomainOverview()
  • Domain organic keywordsdomainOrganic()
  • Domain organic competitorsdomainCompetitors()
  • Keyword overviewkeywordOverview()
  • Related keywordsrelatedKeywords()
  • Keyword difficultykeywordDifficulty()
  • Backlinks overviewbacklinksOverview()
  • Backlinks listbacklinks()
  • Semicolon-separated CSV decoded into array<int, array<string, string>>, keyed by the report's own columns
  • Semrush reports errors with HTTP 200 and an ERROR ... body — those raise SemrushException
  • A non-2xx response raises Illuminate\Http\Client\RequestException
  • Optional database/limit params are omitted from the query when left null

#Installation

composer require jeffersongoncalves/laravel-semrush

Optionally publish the config file:

php artisan vendor:publish --tag="semrush-config"

#Configuration

Add to your .env:

SEMRUSH_API_KEY=your-semrush-api-key
SEMRUSH_DATABASE=us

Grab a key at semrush.com/api-analytics.

#Config Options

// config/semrush.php
return [
    'key' => env('SEMRUSH_API_KEY'),
    'database' => env('SEMRUSH_DATABASE', 'us'),
    'base_url' => env('SEMRUSH_BASE_URL', 'https://api.semrush.com'),
];

When semrush.key is null the client falls back to config('services.semrush.key').

#Usage

Via the facade:

use JeffersonGoncalves\Semrush\Facades\Semrush;

Semrush::domainOverview('example.com');

Semrush::domainOrganic('example.com', database: 'br', limit: 50);

Semrush::domainCompetitors('example.com', limit: 20);

Semrush::keywordOverview('laravel', database: 'us');

Semrush::relatedKeywords('laravel', database: 'us', limit: 25);

Semrush::keywordDifficulty('laravel');

Semrush::backlinksOverview('example.com');

Semrush::backlinks('example.com', targetType: 'domain', limit: 100);

Or inject/resolve the underlying client:

use JeffersonGoncalves\Semrush\Semrush;

$semrush = app(Semrush::class);
$semrush->domainOverview('example.com');

#Return shape

Every method returns a list of rows keyed by the report's export_columns:

Semrush::keywordOverview('laravel');

// [
//     ['Ph' => 'laravel', 'Nq' => '12100', 'Cp' => '1.35', 'Co' => '0.07', 'Nr' => '154000000'],
// ]

Values are always strings — cast them yourself where you need numbers.

#Any other report

Every Semrush report type is reachable through get(), which appends the key, escapes the export and decodes the CSV for you:

Semrush::get([
    'type' => 'phrase_this',
    'phrase' => 'laravel',
    'database' => 'us',
    'export_columns' => 'Ph,Nq,Cp',
]);

#Databases

us (default), br, uk, de, fr, es, … — the full list is in the Semrush docs. Set the default with SEMRUSH_DATABASE or pass database: per call.

#Error handling

use Illuminate\Http\Client\RequestException;
use JeffersonGoncalves\Semrush\Exceptions\SemrushException;

try {
    $rows = Semrush::keywordOverview('laravel');
} catch (SemrushException $e) {
    // "ERROR 50 :: NOTHING FOUND", "ERROR 120 :: WRONG KEY", ...
} catch (RequestException $e) {
    // $e->response->status(), $e->response->body(), ...
}

#Testing

composer test

#Static Analysis

composer analyse

#Code Formatting

composer format

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

Nueva versión disponible.