Create XML Sitemap with index file in php

Simple and easy methods to create search engine friendly XML Sitemap in php frameworks with index file and a list of sitemaps to submit to Google Search Console

Steps to create a simple XML Sitemap Index file with Sitemaps in MVC Framworks


  1. Use route file to serve sitemap index and other sitemaps urlset files.
  2. Create a Controller to process data and render the XML view.
  3. Create View files to render the XML Sitemap.


What is a sitemap?

A sitemap is a file where you can list the web pages of your site to tell Google and other search engines about the organization of your site content. Search engine web crawlers like Googlebot read this file to more intelligently crawl your site.

Also, your sitemap can provide valuable metadata associated with the pages you list in that sitemap: Metadata is information about a webpage, such as when the page was last updated, how often the page is changed, and the importance of the page relative to other URLs in the site.

You can use a sitemap to provide Google with metadata about specific types of content on your pages, including video and image content.

Sitemap extensions for additional media types

Google supports extended sitemap syntax for the following media types. Use these extensions to describe video files, images, and other hard-to-parse content on your site to improve indexing.

For example, you can give Google the information about video and image content.

Source: Google

USING SITEMAP INDEX FILES (TO GROUP MULTIPLE SITEMAP FILES)

You can provide multiple Sitemap files, but each Sitemap file that you provide must have no more than 50,000 URLs and must be no larger than 50MB (52,428,800 bytes). If you would like, you may compress your Sitemap files using gzip to reduce your bandwidth requirement; however the sitemap file once uncompressed must be no larger than 50MB. If you want to list more than 50,000 URLs, you must create multiple Sitemap files.

The Sitemap index file must:

Note: A Sitemap index file can only specify Sitemaps that are found on the same site as the Sitemap index file. For example, http://www.yoursite.com/sitemap_index.xml can include Sitemaps on http://www.yoursite.com but not on http://www.example.com or http://yourhost.yoursite.com. As with Sitemaps, your Sitemap index file must be UTF-8 encoded.

Sample XML Sitemap Index that list two Sitemaps:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://www.example.com/sitemap1.xml</loc>
<lastmod>2004-10-01T18:23:17+00:00</lastmod>
</sitemap>
<sitemap>
<loc>http://www.example.com/sitemap2.xml</loc>
<lastmod>2005-01-01</lastmod>
</sitemap>
</sitemapindex>
Source: sitemaps.org

Sample Code to show how to create Sitemap Index file with Sitemaps in Laravel


Step 1: In app/Http/routes.php (or if you are using Laravel 5.3+ in routes/web.php):


Route::get('/sitemap.xml', 'SitemapController@index');
Route::get('/sitemap/events', 'SitemapController@events');
Route::get('/sitemap/news', 'SitemapController@news');
Route::get('/sitemap/blogs', 'SitemapController@blogs');

Step 2: In SitemapController create function for the index page and other child page or Sitemaps

<?php
namespace App\Http\Controllers;
use App\Models\Event;
use Illuminate\Support\Facades\View;
use App\Http\Controllers\Controller;
class SitemapController extends Controller
{
public function index()
{
$event = Event::orderBy('updated_at', 'desc')->first();
$event['url'] = url('/sitemap/events');
return response()->view('sitemap.index', [
'event' => $event,
])->header('Content-Type', 'text/xml');
}
public function events()
{
$events = Event::orderBy('updated_at', 'desc')->get();

return response()->view('sitemap.events', [
'events' => $events,
])->header('Content-Type', 'text/xml');
}
}

Step 3: Create View for Sitemap Index and Sitemap files

In this example we will show View file for Index file and Sitemap for events

resources/views/sitemap/index.blade.php

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>{{$event->url}}</loc>
<lastmod>{{ $event->updated_at->tz('UTC')->toAtomString() }}</lastmod>
</sitemap>
</sitemapindex>


resources/views/sitemap/events.blade.php

<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($events as $event)
<url>
<loc>{{url($event->slug)}}</loc>
<lastmod>{{$event->updated_at->tz('UTC')->toAtomString()}}</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
@endforeach
</urlset>


That's all, you are all set to go with your dynamically generated sitemap.


Submiting XML Sitemap to Google, bing and other Search Engines


So, we have completed creating our dynamically generated sitemap, now next step is to sumbit to Google Webmaster Console or Bing.

  • Sign in to your Google Search Console, and go to you added property.
  • In dropdown Crawl, section Sitemaps, you can find the options to add/test your Sitemap.
  • Add sitemap.xml which you have created in previous step. If there is no errors, you are all set to go.

Good Luck.




Back to Tutorials Next Tutorial