Cara Membuat Peta Situs XML Dinamis untuk Situs Web di PHP

oleh Vincy. Terakhir diubah pada 29 Mei 2021.

Saya mendapatkan email setiap hari yang meminta saya untuk memberikan tautan ke situs web mereka, kebanyakan dari mereka adalah situs web spam. Aku benar-benar menertawakan mereka. Orang-orang backlink spam itu harus belajar dan mengikuti perkembangan teknologi.

Alasannya, Google jauh di depan dalam permainan. Berapa banyak backlink yang Anda dapatkan adalah salah satu parameter usang. Google telah mendapatkan ribuan poin data untuk memvalidasi dan memberi peringkat situs web. Pastinya akan menyaring tautan spam dengan mudah.

Jika Anda ingin membantu Google dan menaikkan peringkat Anda, ada satu hal yang baik untuk dilakukan. Buat peta situs yang valid untuk situs web Anda dan kirimkan ke Google. Ini akan membantu botnya untuk mengindeks situs web dan memetakannya seperti yang Anda inginkan, pada akhirnya memberi Anda peringkat tinggi dalam hasil pencarian. SEO menang!

peta situs

Peta situs adalah file pemetaan yang memiliki spesifikasi tentang URL halaman situs dan detail terkait lainnya. Itu juga dapat memetakan URL konten lain dari posting, produk, gambar, video, berita, dan lainnya dalam struktur konvensional.

Ada konvensi untuk skema XML untuk protokol peta situs.

Ini memungkinkan perayap mesin telusur mengurai XML peta situs dan memberikan detail berharga. Detail ini berguna untuk mengoptimalkan halaman web, konten, dan hubungan di antara mereka.

Perayap mesin pencari menangkap halaman yang baru saja diperbarui di antara yang lain. Ini akan membantu untuk mendapatkan reputasi berdasarkan frekuensi perubahan.

Mari kita bahas pembuatan peta situs untuk situs web dan kepentingannya lebih lanjut di bagian yang akan datang.

Ini memiliki contoh untuk membuat peta situs XML dinamis di PHP dengan database.

Peta Situs yang Dihasilkan Xml

Apa yang ada di dalam?

  1. Pentingnya peta situs
  2. Alat untuk membuat peta situs
  3. Tentang contoh ini
  4. Skrip basis data
  5. Hasilkan peta situs secara dinamis di PHP
  6. Layanan peta situs di PHP untuk membangun XML
  7. Format data XML peta situs keluaran site

Pentingnya peta situs

Peta situs adalah salah satu alat utama yang memungkinkan mesin pencari merayapi bot untuk mendapatkan struktur situs. Ini membantu mesin pencari untuk mengindeks URL situs.

Dengan peta situs, meningkatkan kemungkinan untuk mengambil URL yang secara langsung dapat mempengaruhi pembaca situs untuk tumbuh lebih tinggi.

Mesin pencari terkemuka seperti Google merekomendasikan menempatkan peta situs untuk situs web. Ini mendokumentasikan alasan meyakinkan untuk memberi tahu “mengapa peta situs diperlukan?”

  1. Jika situs memiliki banyak URL halaman.
  2. Jika memiliki volume arsip halaman yang berat.
  3. Jika baru diluncurkan dan diabaikan (~ nihil) ditautkan oleh situs eksternal.
  4. Ini situs memiliki sejumlah besar file media kaya.

Ada alat online atau terintegrasi untuk menghasilkan peta situs untuk situs web. Juga, generator peta situs diluncurkan sebagai produk SaaS dan menyediakan berbagai skala fitur untuk pelanggan mereka.

XML-Sitemaps Generator adalah alat online populer untuk membuat peta situs. Ini menciptakan format yang optimal untuk diposting ke mesin pencari seperti Google, Bing dan banyak lagi.

Halaman tertaut menunjukkan alat pembuat peta situs online alternatif lainnya. Ini menghasilkan Gambar dinamis- dan peta situs multibahasa.

Tentang contoh ini

Menghasilkan peta situs untuk situs web dalam PHP adalah tujuan dari contoh ini. Ini mengimplementasikan layanan ini dengan struktur kode yang bersih.

Ini menciptakan konfigurasi, model, layanan, dan DAO untuk secara sistematis membuat generator peta situs XML dinamis di PHP menggunakan database MySQL.

Itu tidak menggunakan pustaka atau alat pihak ketiga yang menjadi sandaran proses pembuatan peta situs.

Ini adalah struktur file dari contoh pembuatan peta situs ini. Ini mungkin menunjukkan kebersihan dan kesederhanaan cara penerapannya.

Hasilkan File Peta Situs

Ini memiliki meta halaman dalam database dan membuat model untuk mengambil meta situs.

Layanan pembuatan peta situs menggunakan metadata untuk menyusun skema XML untuk protokol peta situs.

Tombol “Buat” di UI memicu pembuatan peta situs dan mengakui pengguna.

Ini menghasilkan dua XML. Salah satunya adalah indeks peta situs dan yang lainnya adalah peta situs sebenarnya yang akan dirayapi.

Ini menyimpan file yang dihasilkan di root aplikasi yang ditentukan sebagai direktori target.

Skrip basis data

File SQL ini berisi skrip database untuk mengatur struktur tabel untuk menjalankan contoh ini.

Ini berisi pernyataan CREATE dan data tabel tbl_page. Ini memiliki catatan memiliki judul meta halaman, deskripsi, siput dan banyak lagi.

Slug digunakan untuk menyiapkan URL halaman selama pembuatan elemen XML peta situs.

sql/database.sql

-- phpMyAdmin SQL Dump
-- version 5.0.3
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Mar 31, 2021 at 07:12 AM
-- Server version: 10.4.14-MariaDB
-- PHP Version: 7.2.34

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `blog_example`
--

-- --------------------------------------------------------

--
-- Table structure for table `tbl_page`
--

CREATE TABLE `tbl_page` (
  `id` int(11) NOT NULL,
  `page_title` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
  `slug` varchar(255) NOT NULL,
  `creat_at` datetime NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--
-- Dumping data for table `tbl_page`
--

INSERT INTO `tbl_page` (`id`, `page_title`, `description`, `slug`, `creat_at`) VALUES
(1, 'about-us', 'It contain some personal information.', 'about-us', '2021-03-31 10:34:35'),
(2, 'portfolio', 'It provides clients to view your work.', 'portfolio', '2021-03-31 10:34:35'),
(3, 'contact-us', 'It includes all the standard information.', 'contact-us', '2021-03-31 10:34:35'),
(4, 'our-services', 'Descriptions of the products and services.', 'our-services', '2021-03-31 10:34:35');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `tbl_page`
--
ALTER TABLE `tbl_page`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_page`
--
ALTER TABLE `tbl_page`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Buat Tabel Halaman Peta Situs

Hasilkan peta situs secara dinamis di PHP

Bagian ini memiliki kode untuk menampilkan kontrol UI untuk memicu proses pembuatan peta situs di PHP.

Juga, ia memiliki kode kelas model PHP yang menghubungkan DB untuk mendapatkan meta halaman dari database.

Memicu pembuatan Peta Situs dari UI

index.php (Template HTML)

<html>
<head>
<title>Generate Sitemap</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://phppot.com/php/how-to-generate-dynamic-xml-sitemap-for-website-in-php/./assets/css/style.css" rel="stylesheet" />
</head>
<body>
    <div class="container">
        <div class="row">
            <a href="?action=generate" class="btn-generate"
                title="Generate">Generate Sitemap</a>
        </div>
        <div class="row">
        <?php if(!empty($success)){?>
        <div class="success"><?php echo $success;?></div>
        <?php }else if(!empty($error)){?>
        <div class="error"><?php echo $error;?></div>
        <?php }?>
        </div>
    </div>
</body>
</html>

assets/css/style.css

.container {
    -webkit-font-smoothing: antialiased;
    font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
    font-size: .9em;
    color: #1e2a28;
    width: 550px;
    margin: 0 auto;
    padding: 0px 20px 20px 20px;
    margin-top: 50px;
}

.row {
    margin: 15px 0;
    display: flex;
}

.btn-generate:hover {
    background: #353434;
}

.btn-generate {
    padding: 10px;
    background: #4C4B4B;
    border-radius: 3px;
    text-decoration: none;
    border: 1px #353434 solid;
    color: #FFF;
}

.error {
    width: 100%;
    color: #D8000C;
    background-color: #f5d7d4;
    border: 1px solid #f2ccc7;
    opacity: 0.83;
    transition: opacity 0.6s;
    padding: 10px;
    border-radius: 3px;
}

.success {
    width: 100%;
    text-align: left;
    color: #007532;
    background-color: #c1f9d8;
    border: 1px solid #bce8ce;
    padding: 10px;
    border-radius: 3px;
}

Ambil halaman dari database

Ini adalah kode PHP yang akan dieksekusi dengan mengklik tautan Hasilkan di halaman beranda.

Ini memanggil kelas model untuk mengambil data halaman. Array yang dihasilkan akan dikirim ke layanan pembuatan peta situs.

Titik akhir PHP ini menyiapkan teks respons berdasarkan hasil bersih proses pembuatan peta situs.

index.php (kode PHP)

<?php
use PhppotServiceAppSiteMapService;
use PhppotPage;

require_once __DIR__ . "/Service/AppSiteMapService.php";
require_once __DIR__ . '/Model/Page.php';
if (! empty($_GET["action"]) && $_GET["action"] == "generate") {
    $pageModel = new Page();
    $result = $pageModel->getAllPage();
    $appSiteMapService = new AppSiteMapService();
    $siteMapResult = $appSiteMapService->generateSiteMap($result);
    if (!empty($siteMapResult)) {
        $success = "Sitemap has been generated.";
    } else {
        $error = "Problem in generating sitemap.";
    }
}
?>

Kelas model ini menghubungkan aplikasi DataSource untuk mengambil meta halaman. Fungsi getAllPage() mengembalikan larik data baris dari tabel tbl_page.

Model/Halaman.php

<?php
namespace Phppot;

class Page
{

    private $ds;

    function __construct()
    {
        require_once __DIR__ . '/../lib/DataSource.php';
        $this->ds = new DataSource();
    }

    function getAllPage()
    {
        $query = "SELECT slug FROM tbl_page";
        $result = $this->ds->select($query);
        $resultArray = array();
        foreach ($result as $pages) {
            foreach ($pages as $value) {
                $resultArray[] = $value;
            }
        }
        return $resultArray;
    }
}

Layanan peta situs di PHP untuk membangun XML

Contoh ini berisi file konfigurasi yang mendefinisikan URL domain root dengan konstanta. Ini digunakan saat membuat item peta situs untuk menyiapkan elemen lokasi halaman.

lib/Config.php

<?php
namespace Phppot;

class Config
{

    const SITE_DOMAIN = "http://localhost/";
}

Itu LayananPeta SitusAplikasi kelas membuat instance Layanan Peta Situs dalam konstruktornya. Ini memanggil fungsi untuk menambahkan item peta situs dan untuk mengatur indeks peta situs dengan menggunakan ini dibuat instan.

Layanan ini memiliki fungsi untuk menambahkan URL halaman rumah secara eksklusif. Dan, itu menambahkan lain ke dalam dengan mengulangi data halaman dengan satu lingkaran.

Setelah itu, ia memanggil layanan untuk menghasilkan indeks peta situs. Ini adalah XML lain untuk mengindeks file peta situs yang dihasilkan dari sebuah situs web.

Service/AppSiteMapService.php

<?php
namespace PhppotService;

use PhppotConfig;

/**
 * This SiteMapGeneration Class
 * To Call method From SiteMapService to Generate Xml for sitemap
 * and also sitemap index file.
 */
class AppSiteMapService
{

    private $siteMapService;

    private $domain;

    public function __construct()
    {
        require_once __DIR__ . '/../lib/Config.php';
        $this->domain = Config::SITE_DOMAIN;
        require_once __DIR__ . '/SiteMapService.php';
        $this->siteMapService = new SiteMapService($this->domain);
    }

    private function addHomePage()
    {
        // Home Page url
        $this->siteMapService->addItem("", "", "");
    }

    private function addSitePages($result)
    {
        if (! empty($result)) {
            foreach ($result as $k => $v) {
                $this->siteMapService->addItem($result[$k]);
            }
        }
    }

    public function generateSiteMap($result)
    {
        $this->addHomePage();
        $this->addSitePages($result);
        $siteMapResult = $this->siteMapService->createSitemapIndex($this->domain, 'Now');
        if (empty($siteMapResult)) {
            $result = "1";
        } else {
            $result = "0";
        }
        return $result;
    }
}

Layanan ini adalah inti dari generator peta situs. Ini menggunakan kelas XMLWriter untuk membangun peta situs XML dinamis di PHP.

Properti kelas menampung instance penulis, nama file peta situs, batas maksimum item per peta situs, dan banyak lagi.

Ini mendefinisikan setter getter untuk domain root, nama file, jalur, dan lain-lain Tambahkan Barang() metode ini digunakan untuk menulis setiap elemen dengan anak-anaknya ke dalam .

Setiap item dapat menyimpan lebih banyak detail seperti frekuensi perubahan halaman, prioritas, dan lain-lain.

Layanan/Peta SitusLayanan.php

<?php
namespace PhppotService;

use XMLWriter;

/**
 * SiteMap
 *
 * This class used for generating Google Sitemap files
 * Cycle: Schema added for validation, time format changed to ISO
 *
 * @package SiteMap
 * @author Cycle
 * @copyright 2018 Cycle
 * @license Cycle License
 */
class SiteMapService
{

    /**
     *
     * @var XMLWriter
     */
    private $writer;

    private $domain;

    private $path;

    private $filename="sitemap";

    private $current_item = 0;

    private $current_sitemap = 0;

    const EXT = '.xml';

    const SCHEMA = 'http://www.sitemaps.org/schemas/sitemap/0.9';

    const DEFAULT_PRIORITY = 0.5;

    const ITEM_PER_SITEMAP = 50000;

    const SEPERATOR = '-';

    const INDEX_SUFFIX = 'index';

    /**
     *
     * @param string $domain
     */
    public function __construct($domain)
    {
        $this->setDomain($domain);
    }

    /**
     * Sets root path of the website, starting with http:// or https://
     *
     * @param string $domain
     */
    public function setDomain($domain)
    {
        $this->domain = $domain;
        return $this;
    }

    /**
     * Returns root path of the website
     *
     * @return string
     */
    private function getDomain()
    {
        return $this->domain;
    }

    /**
     * Returns XMLWriter object instance
     *
     * @return XMLWriter
     */
    private function getWriter()
    {
        return $this->writer;
    }

    /**
     * Assigns XMLWriter object instance
     *
     * @param XMLWriter $writer
     */
    private function setWriter(XMLWriter $writer)
    {
        $this->writer = $writer;
    }

    /**
     * Returns the path of sitemaps
     *
     * @return string
     */
    private function getPath()
    {
        return $this->path;
    }

    /**
     * Sets paths of sitemaps
     *
     * @param string $path
     * @return Sitemap
     */
    public function setPath($path)
    {
        $this->path = $path;
        return $this;
    }

    /**
     * Returns the filename of the sitemap file
     *
     * @return string
     */
    private function getFilename()
    {
        return $this->filename;
    }

    /**
     * Sets filename of sitemap file
     *
     * @param string $filename
     * @return Sitemap
     */
    public function setFilename($filename)
    {
        $this->filename = $filename;
        return $this;
    }

    /**
     * Returns current item count
     *
     * @return int
     */
    private function getCurrentItem()
    {
        return $this->current_item;
    }

    /**
     * Increases item counter
     */
    private function incCurrentItem()
    {
        $this->current_item = $this->current_item + 1;
    }

    /**
     * Returns current sitemap file count
     *
     * @return int
     */
    private function getCurrentSitemap()
    {
        return $this->current_sitemap;
    }

    /**
     * Increases sitemap file count
     */
    private function incCurrentSitemap()
    {
        $this->current_sitemap = $this->current_sitemap + 1;
    }

    /**
     * Prepares sitemap XML document
     */
    private function startSitemap()
    {
        $this->setWriter(new XMLWriter());
        if ($this->getCurrentSitemap()) {
            $this->getWriter()->openURI($this->getPath() . $this->getFilename() . self::SEPERATOR . $this->getCurrentSitemap() . self::EXT);
        } else {
            $this->getWriter()->openURI($this->getPath() . $this->getFilename() . self::EXT);
        }
        $this->getWriter()->startDocument('1.0', 'UTF-8');
        $this->getWriter()->setIndent(true);
        $this->getWriter()->startElement('urlset');
        $this->getWriter()->writeAttribute('xmlns:xsi', "http://www.w3.org/2001/XMLSchema-instance");
        $this->getWriter()->writeAttribute('xsi:schemaLocation', "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
        $this->getWriter()->writeAttribute('xmlns', self::SCHEMA);
    }

    /**
     * Adds an item to the sitemap
     *
     * @param string $loc
     *            URL of the page. This value must be less than 2,048 characters.
     * @param string $priority
     *            The priority of this URL relative to other URLs on your SiteMapService. Valid values range from 0.0 to 1.0.
     * @param string $changefreq
     *            How frequently the page is likely to change. Valid values are always, hourly, daily, weekly, monthly, yearly and never.
     * @param string|int $lastmod
     *            The date of last modification of URL. Unix timestamp or any English textual DateTime description.
     * @return Sitemap
     */
    public function addItem($loc, $priority = self::DEFAULT_PRIORITY, $changefreq = NULL, $lastmod = NULL)
    {
        if (($this->getCurrentItem() % self::ITEM_PER_SITEMAP) == 0) {
            if ($this->getWriter() instanceof XMLWriter) {
                $this->endSitemap();
            }
            $this->startSitemap();
            $this->incCurrentSitemap();
        }
        $this->incCurrentItem();
        $this->getWriter()->startElement('url');
        if ($loc == "http://localhost/") {
            $this->getWriter()->writeElement('loc', $loc);
        } else {
            $this->getWriter()->writeElement('loc', $this->getDomain() . $loc);
        }
        if ($lastmod)
            $this->getWriter()->writeElement('lastmod', $this->getLastModifiedDate($lastmod));
        if ($changefreq)
            $this->getWriter()->writeElement('changefreq', $changefreq);
        $this->getWriter()->endElement();
        return $this;
    }

    /**
     * Prepares given a date for sitemap
     *
     * @param string $date
     *            Unix timestamp or any English textual datetime description
     * @return ISO8601 format.
     */
    private function getLastModifiedDate($date)
    {
        if (ctype_digit($date)) {
            return date('c', $date);
        } else {
            $date = strtotime($date);
            return date('c', $date);
        }
    }

    /**
     * Finalizes tags of sitemap XML document.
     */
    private function endSitemap()
    {
        if (! $this->getWriter()) {
            $this->startSitemap();
        }
        $this->getWriter()->endElement();
        $this->getWriter()->endDocument();
    }

    /**
     * Writes Google sitemap index for generated sitemap files
     *
     * @param string $loc
     *            Accessible URL path of sitemaps
     * @param string|int $lastmod
     *            The date of last modification of sitemap. Unix timestamp or any English textual datetime description.
     */
    public function createSitemapIndex($loc, $lastmod = 'Today')
    {
        $this->endSitemap();
        $indexwriter = new XMLWriter();
        $indexwriter->openURI($this->getPath() . $this->getFilename() . self::SEPERATOR . self::INDEX_SUFFIX . self::EXT);
        $indexwriter->startDocument('1.0', 'UTF-8');
        $indexwriter->setIndent(true);
        $indexwriter->startElement('sitemapindex');
        $indexwriter->writeAttribute('xmlns', self::SCHEMA);
        for ($index = 0; $index < $this->getCurrentSitemap(); $index ++) {
            $indexwriter->startElement('sitemap');
            $indexwriter->writeElement('loc', $loc . $this->getFilename() . ($index ? self::SEPERATOR . $index : '') . self::EXT);
            $indexwriter->writeElement('lastmod', $this->getLastModifiedDate($lastmod));
            $indexwriter->endElement();
        }
        $indexwriter->endElement();
        $indexwriter->endDocument();
    }
}

Format data XML peta situs keluaran site

Tangkapan layar ini menunjukkan file indeks peta situs. Ini memiliki referensi untuk semua peta situs yang dibuat untuk situs web.

Ini menampilkan jalur file peta situs dan tanggal modifikasi setiap elemen .

Indeks Peta Situs yang Dihasilkan Xml

Kesimpulan

Jadi kita telah melihat cara membuat peta situs XML dinamis di PHP. Telah dibahas dengan contoh yang sesuai untuk memperjelas semuanya tentang proses ini.

Kami telah membahas pentingnya peta situs untuk sebuah situs web. Selain itu, kami melihat beberapa contoh alat yang tersedia secara online untuk menghasilkan dan mengelola peta situs.

Contoh ini telah membuat indeks peta situs untuk jumlah peta situs yang dihasilkan. Saya harap, ini bermanfaat untuk mendapatkan ide tentang membuat peta situs khusus yang dibuat oleh kita sendiri.

Unduh

Kembali ke Atas


Source link