http://example.test/sitemap URL'si çağrıldığında çalışacak sitemap.xml dosyası yerine geçecek bir link oluşturacağız. Projenizin rotalarının bulunduğu web.php dosyasını açıp aşağıdaki satırı ekleyip kaydedin. Farklı sürümlerde routes.php olarak adlandırılmış olabilir.
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('sitemap', 'FrontController@sitemap')->name('sitemap');
web.php ya da routes.php dosyasına sitemap rotasını ekledikten sonra kaydediyoruz.
Projeniz için uygun olan controller dosyanızı siz belirleyin. Ben tüm Frontend rotaları için FrontController.php dosyasını kullanıyorum. Siz de uygun controller dosyasını açın ve aşağıdaki public function sitemap fonksiyonunu controller dosyanıza ekleyin. Extra olarak Carbon paketi kullandım. Zaman ve tarih işlemlerinde işime yarıyor.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Database\Query\Builder;
use App\Post;
use Carbon\Carbon;
class FrontController extends Controller
{
public function sitemap(){
$posts = Post::Where('status', '=', 1)->orderBy('updated_at', 'DESC')->get();
$now = Carbon::now()->toAtomString();
$content = view('front.sitemap', compact('posts','now'));
return response($content)->header('Content-Type', 'application/xml');
}
}
Controller dosyamızda gerekli düzenlemeleri yaptıktan sonra sitemap.xml'in yerini alacak bir blade şablonu oluşturalım. sitemap.blade.php dosyanızı oluşturmak için aşağıdaki örnek kodu inceleyebilirsiniz. Post modelinden gelen verileri foreache aldım böylelikle http://example.test/sitemap adresi ziyaret edildiği anda sitemde bulunan tüm blog yazılarım oluşmuş oluyor. Sayfanın çıktısını http://umutyerebakmaz.com/sitemap adresinden inceleyebilirsiniz. Google Search Console kullanıyorsanız hesabınızı açıp oluşturduğunuz URL parametresini bir kez girmeniz yeterli olacaktır.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{{ url('/') }}</loc>
<lastmod>{{ $now }}</lastmod>
<changefreq>Daily</changefreq>
<priority>0.8</priority>
</url>
@foreach($posts as $post)
<url>
<loc>{{ url('/blog/').'/'.$post->category->slug.'/'.$post->slug }}</loc>
<lastmod>{{ $post->created_at->toAtomString() }}</lastmod>
<changefreq>Daily</changefreq>
<priority>0.8</priority>
</url>
@endforeach
</urlset>