Los sitemaps son la parte más importante para impulsar el SEO de su aplicación. Aquí, intentaré explicar la forma más fácil de implementar un mapa del sitio dinámico en su aplicación Laravel.
Usaremos un paquete increíble y muy fácil llamado Laravelium/Sitemap.
Lo primero que haremos es instalar este paquete usando composer
:
composer require laravelium/sitemap
Ahora, publiquemos los archivos de configuración de este paquete:
php artisan vendor:publish --provider="Laravelium\Sitemap\SitemapServiceProvider"
Este comando publicará los siguientes archivos que puede editar como desee
[/config/sitemap.php]
[/resources/views/vendor/sitemap]
[/public/vendor/sitemap]
Entonces creamos un controlador:
php artisan make:controller SitemapController
Ahora suponga que queremos publicar todo el contenido de nuestro modelo de Blog
en un mapa del sitio. Pongamos el siguiente código dentro de nuestro SitemapController
recién creado
use App\Blog;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class SitemapController extends Controller
{
public function sitemap () {
// creamos el nuevo objeto sitemap
$sitemap_contents = App::make("sitemap");
// establecer cache
$sitemap_contents->setCache('laravel.sitemap_contents', 3600);
// obtener todos los posts de la base de datos
$blogs = Blog::where('published', 1)->orderBy('created_at', 'desc')->get();
// agregar todos los posts al sitemap
foreach ($blogs as $blog)
{
$url = url('blog/'.$blog->id);
$sitemap_contents->add($url, $blog->updated_at,'1.0','daily');
}
// mostrar el sitemap (options: 'xml' (default), 'html', 'txt', 'ror-rss', 'ror-rdf')
return $sitemap_contents->render('xml');
}
}
Esta función pondrá todos los blogs publicados en un sitemap. aquí hemos almacenado en caché este mapa del sitio durante 3600 segundos.
Las propiedades de cada enlace como podemos ver en el código:
- prioridad: 1.0
- frecuencia de actualización: diaria
puede deshabilitar el almacenamiento en caché o puede cambiar las propiedades como desee.
El siguiente paso será escribir la ruta y ver nuestro mapa del sitio. Vaya a route/web.php
y escriba la siguiente línea
Route::get('sitemap', 'SitemapController@sitemap');
Podemos cambiar el aspecto de este mapa del sitio dentro de este archivo resources/views /vendor /sitemap
.
Para agregar una imagen (o una lista de imágenes) al contenido de este mapa del sitio, podemos cambiar la función foreach en el código anterior para que sea
use URL;
foreach ($blogs as $blog)
{
$url = url('blog/'.$blog->id);
$images = [['url' => URL::to('uploads/'.$blog->thumbnail), 'title' => $blog->title, 'caption' => str_limit($blog->body, $limit = 100, $end = '...')]];
$sitemap_contents->add($url, $blog->updated_at,'1.0','daily',$images);
}
esto agregará una matriz de imágenes a cada elemento del blog en este mapa del sitio, para agregar más imágenes, puede expandir la matriz como desee.