Nieuws

SEO verbeteren: Genereer een sitemap.xml voor public projects

— Zorg dat je public projects in de zoekresultaten verschijnen.

Daniel

Daniel

High Availability Engineer - Team Lead

Tekst van de badge
SEO verbeteren: Genereer een sitemap.xml voor public projects

Als je Open Source-projecten host op een zelf gehoste GitLab instance, is het je misschien opgevallen dat projecten niet erg goed worden geïndexeerd door Google en andere zoekmachines. Dit kan worden verbeterd door een sitemap.xml te generen waarin de public projects worden vermeld. GitLab biedt hier op dit moment nog geen native oplossing voor. Het functieverzoek om dit te implementeren staat nog op de to-do lijst. Gelukkig kunnen we GitLab wel gebruiken om een sitemap voor ons te genereren met een eenvoudige configuratie. De oplossing die we hier bieden is misschien niet perfect, maar helpt enorm.

Genereer de sitemap

Laten we allereerst beginnen met het genereren van de sitemap zelf. Hoewel GitLab de sitemap niet automatisch genereert, bevat het wel code om deze te genereren. Dit komt omdat GitLab wel een sitemap aanbiedt op gitlab.com/sitemap.xml. Om een sitemap te genereren, plaatst je het Ruby-script hieronder ergens op je GitLab instance.We gebruiken „/var/opt/gitlabhost/generate_sitemap.rb” in dit voorbeeld.

# generate_sitemap.rb
include Gitlab::Routing

file = Gitlab::Sitemaps::SitemapFile.new

# Add generic URLs
file.add_elements([explore_projects_url, explore_snippets_url, explore_groups_url])

# Add group and subgroup URLs
groups = GroupsFinder.new(nil).execute
file.add_elements(groups)

# Add project URLs
for group in groups do
    projects = GroupProjectsFinder.new(
        current_user: nil,
        group: group,
        params: { non_archived: true, visibility_level: Gitlab::VisibilityLevel::PUBLIC },
        options: { exclude_shared: true }
    ).execute.include_project_feature.inc_routes

    file.add_elements(projects)

    for project in projects do
        deployment = PagesDeployment.find_by(project_id: project.id)
        if not deployment.nil?
            parts = project.path_with_namespace.split('/')
            namespace = parts.shift

            file.add_elements([sprintf('https://%s.pages.example.com/%s', namespace, parts.join('/'))])
        end
    end
end

# Render sitemap
if file.empty?
    abort('No URLs found to generate the sitemap')
else
    File.write('/var/opt/gitlabhost/public/sitemap.xml', file.render)
    puts 'Saved generated sitemap to /var/opt/gitlabhost/public/sitemap.xml'
end

Zoals je kunt zien, gebruiken we de interne sitemap en group-finder-functionality van GitLab om de sitemap te genereren. Zorg ervoor dat je „pages.example.com” vervangt door de domeinnaam waarop je GitLab-pagina's worden weergegeven, als je die hebt.

Je kunt dit script als volgt uitvoeren met de gitlab-rails runner vanaf je GitLab-server:

$ gitlab-rails runner /var/opt/gitlabhost/generate_sitemap.rb

Dit kan eenvoudig worden uitgevoerd in een dagelijkse cron job zoals deze:

0 2 * * * /usr/bin/gitlab-rails runner /var/opt/gitlabhost/generate_sitemap.rb

Nu heb je een sitemap.xml bestand gegenereerd in "/var/opt/gitlabhost/public/sitemap.xml" dat elke dag om 02:00 wordt bijgewerkt.

De sitemap aanbieden

Het genereren van de sitemap is slechts de helft van de oplossing. We moeten de sitemap ook aanbieden en crawlers laten weten waar ze het kunnen vinden. Aan de hand van het voorbeeld van GitLab's documentatie voor het aanbieden van een aangepaste robots.txt, kunnen we ook een aangepaste sitemap.xml vindbaar laten maken. Voeg het volgende toe aan je configuratiebestand „/etc/gitlab/gitlab.rb” en voer „gitlab-ctl reconfigure” uit.

nginx['custom_gitlab_server_config'] = "\nlocation = /sitemap.xml { alias /var/opt/gitlabhost/public/sitemap.xml; }\n
\nlocation = /robots.txt { alias /var/opt/gitlabhost/public/robots.txt; }\n"

Dit ziet er nogal rommelig uit met alle "\n" items, maar dit is nodig omdat deze regel een oneliner moet zijn die in de nginx-configuratie wordt geïnjecteerd en correct moet worden geformatteerd zodat nginx het correct kan verwerken. Deze configuratie bevat al een verwijzing naar het bestand robots.txt dat we nu zullen bewerken.

$ cp /opt/gitlab/embedded/service/gitlab-rails/public/robots.txt /var/opt/gitlabhost/public/robots.txt

Kopieer GitLab's robots.txt naar een nieuwe locatie zodat we deze kunnen bewerken. Open het bestand en voeg onderaan „Sitemap: https://gitlab.example.com/sitemap.xml" toe. Wijzig „" gitlab.example.com "” met het domein waarop uw GitLab-instance beschikbaar is. That's it!

Conclusie

Het vergt een beetje aangepaste configuratie, maar het is mogelijk om een sitemap.xml voor je GitLab-instance te genereren met behulp van de stappen die hier worden beschreven. We hopen dat dit je helpt om dit probleem op te lossen totdat GitLab een native oplossing biedt.

Daniel

Daniel

High Availability Engineer - Team Lead

GitlabHost-logo

Klaar om je eigen GitLab omgeving te creëren?

Veilig en beschermd
Voldoet aan de AVG
Hulp van experts