PHP code example of vormkracht10 / laravel-seo-scanner
1. Go to this page and download the library: Download vormkracht10/laravel-seo-scanner library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
vormkracht10 / laravel-seo-scanner example snippets
use Vormkracht10\Seo\Traits\HasSeoScore;
use Vormkracht10\Seo\SeoInterface;
class BlogPost extends Model implements SeoInterface
{
use HasFactory,
HasSeoScore;
protected $fillable = [
'title',
'description',
'slug',
// ...
];
public function getUrlAttribute(): string
{
return 'https://vormkracht10.nl/' . $this->slug;
}
}
$scores = Model::withSeoScores()->get();
$model = Model::first();
// Get just the score
$score = $model->getCurrentScore();
// Get the score including the details
$scoreDetails = $model->getCurrentScoreDetails();
protected function schedule(Schedule $schedule)
{
// ...
$schedule->command('model:prune')->daily();
}
protected $listen = [
// ...
ScanCompleted::class => [
// Add your listener here
],
];
use Vormkracht10\Seo\Models\SeoScan;
// Get the latest scan
$scan = SeoScan::latest()->first();
// Get the failed checks
$failedChecks = $scan->failedChecks;
// Get the total amount of pages scanned
$totalPages = $scan->pages;
use Vormkracht10\Seo\Models\SeoScore;
// Get the latest score
$score = SeoScore::latest()->first();
// Or get all scores for a specific scan
$scan = SeoScan::latest()->with('scores')->first();
namespace App\Support\Seo\Checks;
use Illuminate\Http\Client\Response;
use Symfony\Component\DomCrawler\Crawler;
use Vormkracht10\Seo\Interfaces\Check;
use Vormkracht10\Seo\Traits\PerformCheck;
class CanonicalCheck implements Check
{
use PerformCheck;
/**
* The name of the check.
*/
public string $title = "The page has a canonical meta tag";
/**
* The priority of the check (in terms of SEO).
*/
public string $priority = 'low';
/**
* The time it takes to fix the issue.
*/
public int $timeToFix = 1;
/**
* The weight of the check. This will be used to calculate the score.
*/
public int $scoreWeight = 2;
/**
* If this check should continue after a failure. You don't
* want to continue after a failure if the page is not
* accessible, for example.
*/
public bool $continueAfterFailure = true;
public string|null $failureReason;
/* If you want to check the actual value later on make sure
* to set the actualValue property. This will be used
* when saving the results.
*/
public mixed $actualValue = null;
/* If you want to check the expected value later on make sure
* to set the expectedValue property. This will be used
* when saving the results.
*/
public mixed $expectedValue = null;
public function check(Response $response, Crawler $crawler): bool
{
// Feel free to use any validation you want here.
if (! $this->validateContent($crawler)) {
return false;
}
return true;
}
public function validateContent(Crawler $crawler): bool
{
// Get the canonical meta tag
$node = $crawler->filterXPath('//link[@rel="canonical"]')->getNode(0);
if (! $node) {
// We set the failure reason here so this will be showed in the CLI and saved in the database.
$this->failureReason = 'The canonical meta tag does not exist';
return false;
}
// Get the href attribute
$this->actualValue = $node->getAttribute('href');
if (! $this->actualValue) {
// The failure reason is different here because the canonical tag exists, but it does not have a href attribute.
$this->failureReason = 'The canonical meta tag does not have a href attribute';
return false;
}
// The canonical meta tag exists and has a href attribute, so the check is successful.
return true;
}
}