phpmultilingualdomdocumentxml-sitemaphreflang

How to generate a Google Sitemap with localized versions of a page using PHP and DOMDocument


I want to generate a Google Sitemap using PHP for a multilanguage website. How can i do that the right way, without printing XML strings? Perhaps using the PHP DOMDocument class?

The structure must be like the one Google recommends: https://support.google.com/webmasters/answer/189077#sitemap


Solution

  • This is a question for which I already have an answer:

    $domtree = new DOMDocument("1.0", "UTF-8");
    $domtree->formatOutput = true;
    $urlset = $domtree->createElementNS("http://www.sitemaps.org/schemas/sitemap/0.9", "urlset");
    $domtree->appendChild($urlset);
    $urlset->setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xhtml", "http://www.w3.org/1999/xhtml");
    
    {
        //create the `url`
        $url = $domtree->createElement("url");
        //add the url
        $url_root = $urlset->appendChild($url);
    
        {
            //create the `loc`
            $loc = $domtree->createElement("loc", "http://www.example.com/english/page.html");
            //add the loc to the url
            $url_root->appendChild($loc);
    
            //create `xhtml:link`
            $xhtml_link = $domtree->createElement("xhtml:link");
            //add the `xhtml:link` to the `url`
            $url->appendChild($xhtml_link);
    
            {
                //create an `rel` attribute to the `xhtml:link`
                $dom_attribute = $domtree->createAttribute("rel");
                $dom_attribute->value="alternate";
                //add the attribute to the `xhtml:link`
                $xhtml_link->appendChild($dom_attribute);
    
                //create an `hreflang` attribute to the `xhtml:link`
                $dom_attribute = $domtree->createAttribute("hreflang");
                $dom_attribute->value="en";
                //add the attribute to the `xhtml:link`
                $xhtml_link->appendChild($dom_attribute);
    
                //create an `href` attribute to the `xhtml:link`
                $dom_attribute = $domtree->createAttribute("href");
                $dom_attribute->value="http://www.example.com/english/page.html";
                //add the attribute to the `xhtml:link`
                $xhtml_link->appendChild($dom_attribute);
    
            }
        }
    }