Cara Membuat Sitemap Di CodeIgniter 4

Cara Membuat Sitemap Di CodeIgniter 4

Cara Membuat Sitemap Di CodeIgniter 4


Kali ini saya akan membahas sebuah library codeigniter yang asal dan developnya saya lupa, saya akan memberikan tutorial cara membuat sitemap di CodeIgniter 4 dengan library tersebut.

 

Apa sih sitemap itu dan apa fungsinya ? Menurut Wikipedia sitemap adalah :

 

Sitemap adalah salah satu alat bantu untuk para webmaster yang mempermudah dalam pengenalan peta situs/sitemap di dalam website. Dengan begitu, mesin google dengan mudah menjelajah dan meraih halaman-halaman yang ada di dalamnya. Sama halnya dengan webiste pada umumnya, blog juga memerlukan sitemap agar mesin pencari dengan mudah mendeteksi konten di dalamnya. Dalam sistem sitemap ini pengguna dapat melakukan submit peta web berbasis XML langsung ke Google yang akan membantu Google mengindeks halaman web dengan mudah.

 

Sesuai keterangan diatas maka disimpulkan bahwa sitemap sangatlah penting dalam perkembangan sebuah website atau blog yang berhubungan dengan SEO, yang akan memudahkan konten/artikel kita dapat dikenali oleh mesin pencari google apalagi jika di kombinasikan dengan robot.txt untuk akses Googlebot.

 

Jadi, Bagaimana Cara Membuat Sitemap Di CodeIgniter 4 ?

 

LANGKAH PERTAMA (Membuat Library).

 

Buat sebuah file di app > Libraries dengan nama LibSitemap.php

 

Copy paste kode berikut ke file LibSitemap.php !

 

<?php namespace App\Libraries;

class LibSitemap
{
	public $urls = array();
	public $changefreqs = array(
		'always',
		'hourly',
		'daily',
		'weekly',
		'monthly',
		'yearly',
		'never'
	);

	public function __construct()
	{

    }
	/**
	 * Add an item to the array of items for which the sitemap will be generated
	 * 
	 * @param string $loc URL of the page. This URL must begin with the protocol (such as http) and end with a trailing slash, if your web server requires it. This value must be less than 2,048 characters.
	 * @param string $lastmod The date of last modification of the file. This date should be in W3C Datetime format. This format allows you to omit the time portion, if desired, and use YYYY-MM-DD.
	 * @param string $changefreq How frequently the page is likely to change. This value provides general information to search engines and may not correlate exactly to how often they crawl the page.
	 * @param number $priority The priority of this URL relative to other URLs on your site. Valid values range from 0.0 to 1.0. This value does not affect how your pages are compared to pages on other sites—it only lets the search engines know which pages you deem most important for the crawlers.
	 * @access public
	 * @return boolean
	 */
	public function add($loc, $lastmod = NULL, $changefreq = NULL, $priority = NULL) {
		// Do not continue if the changefreq value is not a valid value
		if ($changefreq !== NULL && !in_array($changefreq, $this->changefreqs)) {
			show_error('Unknown value for changefreq: '.$changefreq);
			return false;
		}
		// Do not continue if the priority value is not a valid number between 0 and 1 
		if ($priority !== NULL && ($priority < 0 || $priority > 1)) {
			show_error('Invalid value for priority: '.$priority);
			return false;
		}
		$item = new \stdClass();
		$item->loc = $loc;
		$item->lastmod = $lastmod;
		$item->changefreq = $changefreq;
		$item->priority = $priority;
		$this->urls[] = $item;
		
		return true;
	}
	
	/**
	 * Generate the sitemap file and replace any output with the valid XML of the sitemap
	 * 
	 * @param string $type Type of sitemap to be generated. Use 'urlset' for a normal sitemap. Use 'sitemapindex' for a sitemap index file.
	 * @access public
	 * @return void
	 */
	public function output($type = 'urlset') {
		$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8" ?><'.$type.'/>');
		$xml->addAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
		$xml->addAttribute('xmlns:xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
		$xml->addAttribute('xmlns:xsi:schemaLocation', 'http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');
		if ($type == 'urlset') {
			foreach ($this->urls as $url) {
				$child = $xml->addChild('url');
				$child->addChild('loc', strtolower($url->loc));
				if (isset($url->lastmod)) $child->addChild('lastmod', $url->lastmod);
				if (isset($url->changefreq)) $child->addChild('changefreq', $url->changefreq);
				if (isset($url->priority)) $child->addChild('priority', number_format($url->priority, 1));
			}
		} elseif ($type == 'sitemapindex') {
			foreach ($this->urls as $url) {
				$child = $xml->addChild('sitemap');
				$child->addChild('loc', strtolower($url->loc));
				if (isset($url->lastmod)) $child->addChild('lastmod', $url->lastmod);
			}
		}
		$xml->asXml('sitemap.xml');
		return $xml->asXml();
	}
	
	/**
	 * Clear all items in the sitemap to be generated
	 * 
	 * @access public
	 * @return boolean
	 */
	public function clear() {
		$this->urls = array();
		return true;
	}

}

 

LANGKAH KE DUA (Membuat Controllers).

 

Buat sebuah file di app > Controllers dengan nama Sitemap.php

 

Copy paste kode berikut ke file Sitemap.php !

 

<?php namespace App\Controllers;

use CodeIgniter\Controller;

use App\Libraries\LibSitemap;

class Sitemap extends Controller
{
	protected $helpers = ['url','date'];
	
    public function __construct()
    {
		// Disini saya tidak menggunakan model untuk query database tapi menggunakan \Config\Database::connect();
		// Yang artinya saya langsung melakukan query disini
        $this->db = \Config\Database::connect();
		$this->libsitemap = new LibSitemap();
	}
	
	//Fungsi ini digunakan untuk membuat peta situs/sitemap
	// changefreq dan priority diambil dari POST form submit di view
	public function create_sitemap()
	{
		if (!empty($_POST)) {
			$changefreq = (!empty($_POST['changefreq']) ? $_POST['changefreq'] : 'weekly');
			$priority = (!empty($_POST['priority']) ? $_POST['priority'] : '0.6');
			
			//Tambahkan URL anda
			//$this->libsitemap->add('URL anda', 'Tanggal', 'frequency', 'priority');
			$this->libsitemap->add(base_url(), date('Y-m-d', now()), $changefreq, '1.0');
			$this->libsitemap->add(base_url('contact'), date('Y-m-d', now()), $changefreq, '0.9');
			
			//Untuk konten URLnya silahkan di sesuaikan dengan punya anda
			$dataposts = $this->db->table('entry')->get()->getResult();
			foreach($dataposts as $entry){
				$this->libsitemap->add($entry->URLanda, date('Y-m-d', now()), $changefreq, $priority);
			}
			
			
			$x = $this->libsitemap->output();
			$this->response->setXML($x);
			return redirect()->to(base_url('sitemap.xml'));
		}
	}
}

 

LANGKAH KE TIGA (Membuat view untuk submit data).

 

Disini saya tidak menjelaskan bagaimana cara membuat view di CodeIgniter 4, saya beranggapan bahwa anda sudah bisa, adapun saya menggunakan form action untuk proses pembuatan sitemap ini karna memerlukan frequency dan priority yang dinamis sesuai keinginan anda. Adapun contoh form saya seperti berikut :

 

<?=form_open(base_url('sitemap/create_sitemap'), array('target' => '_blank'));?>
    <div class="form-group col-md-5" style="margin-left:-15px;">
        <div class="input-group">
            <div class="input-group-addon" style="padding:5px 15px;">Change Frequency</div>
            <select class="form-control input-sm" name="changefreq">
                <option value="" selected>None</option>
                <option value="always">Always</option>
                <option value="hourly">Hourly</option>
                <option value="daily">Daily</option>
                <option value="weekly">Weekly</option>
                <option value="monthly">Monthly</option>
                <option value="yearly">Yearly</option>
                <option value="never">Never</option>
            </select>
        </div>
    </div>
    <div class="form-group col-md-3" style="margin-left:-15px;">
        <div class="input-group">
            <div class="input-group-addon" style="padding:5px 15px;">Priority</div>
            <select class="form-control input-sm" name="priority">
                <option value="0.1" selected>0.1</option>
                <option value="0.2">0.2</option>
                <option value="0.3">0.3</option>
                <option value="0.4">0.4</option>
                <option value="0.5">0.5</option>
                <option value="0.6">0.6</option>
                <option value="0.7">0.7</option>
                <option value="0.8">0.8</option>
                <option value="0.9">0.9</option>
                <option value="1.0">1.0</option>
            </select>
        </div>
    </div>
    <div class="form-group col-md-4" style="margin-left:-15px;">
        <button class="btn btn-sm bg-green btn-flat" type="submit">Buat Sitemap</button>
    </div>
</form>

 

Silahkan sesuaikan CSS/style dengan template anda!, untuk template saya tampilannya seperti berikut :

 

Sitemap Form Submit

 

Setelah anda melakukan submit akan dibuat sebuah file dengan nama sitemap.xml di folder public CodeIgniter 4 anda.

 

Sekian tutorial Cara Membuat Sitemap Di CodeIgniter 4 cool

 

Bagikan


Artikel Dipost Oleh Hariadi

Seorang freelancer website and software developer, gemar dengan ilmu seputar IT serta penuh semangat untuk belajar.


1 Komentar

saleh saleh 23 Apr 2021
don't work it

Berikan komentar ...