ecolabdata / ecospheres

Portail des données de la transition écologique et de la cohésion des territoires
https://ecologie.data.gouv.fr
2 stars 0 forks source link

Référencement des bouquets par les moteurs de recherche #171

Closed streino closed 3 weeks ago

streino commented 4 months ago
abulte commented 3 months ago

Avant indexation plantabilité

Image

Après indexation (ok aussi en navigation privée)

Image

abulte commented 3 months ago

A retester après la prochaine mise en prod, avec un robots.txt adéquat.

streino commented 3 months ago
robots:
  disallow:
    - /admin
    - /datasets
  sitemap:

@abulte Ca te semble adéquat ?

abulte commented 3 months ago

On peut se poser la question d'ignorer /organizations aussi.

abulte commented 2 months ago

Image

Indexation de la home demandée ce jour. Voir si la page bouquets peut être explorée automatiquement.

abulte commented 2 months ago

Pas de changement après la réindexation de la home

Image

Tentative d'indexation de la page bouquets ce jour.

abulte commented 2 months ago

La page /bouquets est bien dans l'index mais pas les pages bouquets.

Image

abulte commented 2 months ago

En l'absence de problèmes remontés par la console (pas de problème sauf la redirection http -> https sur la home) et vu l'inspection de page qui retourne bien la page bouquets complètes avec les liens vers les bouquets : la seule piste semble être de créer un sitemap avec (notamment) nos différents bouquets.

Solution envisagée : GitHub action qui crée un sitemap.xml avec les différentes pages que nous voulons indexer (notamment les pages bouquets), en fonction d'un retour API de data.gouv.fr.

Problème : il faut publier ce sitemap à intervalles réguliers (idéalement plusieurs fois pas jour). Pas de problème sur Netlify mais compliqué voire impossible en prod — même avec un déploiement automatisé, probablement inopportun de déclencher la mécanique pour ça.

Contournement : héberger le sitemap sur un autre domaine, ce qui semble possible en le liant via le robots.txt. A tester pour voir s'il n'y a pas des pièges genre validation de domaine ou autre.

Thoughts @streino?

abulte commented 2 months ago

NB: une solution radicale serait de passer tout ou partie du site en SSR.

streino commented 2 months ago

Pourrait-on générer le sitemap dynamiquement (au moins la portion /bouquets/*) lors du GET sur /sitemap.xml ? Ça a l'air de se faire mais est-ce possible client-side ? Ou peut-être passer uniquement cette route en SSR ?

abulte commented 2 months ago

Pas possible client side de ce que j'ai vu (Google ne le supporte pas). Probablement possible SSR seulement sur cette route, mais voir les impacts sur l'hébergement. Normalement data.gouv.fr devrait être compatible mais à confirmer. Netlify devrait être OK. Probablement plus de travail que la solution "sitemap sur un autre domaine", mais ça peut mettre le pied à l'étrier sur le SSR et/ou nous débloquer si l'autre solution ne marche pas.

streino commented 2 months ago

SSR peut-être aussi plus "propre" dans le sens où le sitemap sera tjs à jour vs délai de décalage entre création d'un nouveau bouquet (ou suppression/passage en brouillon) et génération du nouveau sitemap.

C'est plutôt de l'ordre du détail, mais le crawl passe à ce moment là on a potentiellement un lag non négligeable.

abulte commented 2 months ago

Sitemap de test ici https://ecospheres-sitemap.app.france.sh/sitemap.xml, généré à partir de l'API data.gouv.fr via un script Python.

Malheureusement impossible de le soumettre via la search console pour tester, même en tentant une feinte via data.gouv.fr.

Plusieurs sources indiquent que ça pourrait marcher via le robots.txt (cf plus haut et ici).

J'aimerais tester cette solution avant de se lancer (ou pas) dans une solution SSR un peu compliquée.

Capture d’écran 2024-05-15 à 10 30 54 Capture d’écran 2024-05-15 à 10 32 59
abulte commented 2 months ago

Nouveau robots.txt de prod avec lien vers sitemap externe bien détecté :

Image

En revanche pas sitemap explicitement remonté dans l'interface :

Image

Pas hit sur le sitemap ce jour :

❯ dokku nginx:access-logs
179.43.188.122 - - [21/May/2024:07:25:53 +0000] "GET /.git/config HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36"
104.166.80.5 - - [21/May/2024:11:47:10 +0000] "GET / HTTP/1.1" 403 153 "-" "Mozilla/5.0 (X11; Linux i686; rv:109.0) Gecko/20100101 Firefox/120.0"

Pas de changement notable dans les pages indexées :

Image

Attendre un peu pour voir si ça évolue.

abulte commented 2 months ago

Toujours rien... Un hit sur le sitemap depuis la DINUM.

# grep sitemap /var/log/nginx/ecospheres-sitemap-access.log*
/var/log/nginx/ecospheres-sitemap-access.log.1:185.24.184.132 - - [22/May/2024:15:01:52 +0000] "GET /sitemap.xml HTTP/2.0" 200 319 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0"
/var/log/nginx/ecospheres-sitemap-access.log.1:185.24.184.132 - - [22/May/2024:15:01:52 +0000] "GET /favicon.ico HTTP/2.0" 404 153 "https://ecospheres-sitemap.app.france.sh/sitemap.xml" "Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0"
/var/log/nginx/ecospheres-sitemap-access.log.1:185.24.184.132 - - [22/May/2024:15:01:53 +0000] "GET /sitemap.xml HTTP/2.0" 200 319 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:125.0) Gecko/20100101 Firefox/125.0"
abulte commented 2 months ago

Vu ici https://webmasters.stackexchange.com/questions/138490/cannot-upload-sitemap-from-other-domain-in-google-search-console

External sitemaps are supposedly supported, but I've never seen anybody actually get them to work.

Peut-être tester le trick proxy_pass via Nginx si possible côté data.gouv.fr. Ca devrait être transparent pour Google.

location /sitemap.xml {
    set $backend https://cdn.example.com/sitemap/sitemap.xml;
    proxy_pass $backend;
    proxy_ssl_server_name on;
}
abulte commented 2 months ago

https://ecologie.data.gouv.fr/sitemap.xml pointe via un proxy_pass sur https://ecospheres-sitemap.app.france.sh/sitemap.xml.

Sitemap soumis manuellement (à changer dans la conf de prod si OK).

Image

abulte commented 2 months ago

Pas (encore) d'évolution probante.

Image

Le traitement du sitemap est connu pour prendre plusieurs jours.

abulte commented 2 months ago

Mise à jour de https://ecologie.data.gouv.fr/sitemap.xml avec des dates plus fraiches pour espérer un déclenchement de crawling.

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://ecologie.data.gouv.fr/</loc>
    <lastmod>2024-05-24T07:38:44+00:00</lastmod>
  </url>
  <url>
    <loc>https://ecologie.data.gouv.fr/bouquets</loc>
    <lastmod>2024-05-24T07:38:44+00:00</lastmod>
  </url>
  <url>
    <loc>https://ecologie.data.gouv.fr/about</loc>
    <lastmod>2024-05-24T07:38:44+00:00</lastmod>
  </url>
  <url>
    <loc>https://ecologie.data.gouv.fr/bouquets/itineraires-fraicheur</loc>
    <lastmod>2024-05-17T11:50:25.576000+00:00</lastmod>
  </url>
  <url>
    <loc>https://ecologie.data.gouv.fr/bouquets/projet-alimentaire-territorial</loc>
    <lastmod>2024-05-21T11:54:17.820000+00:00</lastmod>
  </url>
  <url>
    <loc>https://ecologie.data.gouv.fr/bouquets/calque-de-plantabilite</loc>
    <lastmod>2024-05-28T17:40:55.490000+00:00</lastmod>
  </url>
</urlset>
abulte commented 2 months ago

Les bouquets sont au statut "Crawled, not indexed" depuis quelques jours.

Crawled - currently not indexed The page was crawled by Google but not indexed. It may or may not be indexed in the future; no need to resubmit this URL for crawling.

Image

🤞

abulte commented 2 months ago

Les bouquets sont tous dans l'index Google (recherche site:ecologie.data.gouv.fr)

Il manque itinéraire fraicheur dans la console though :

Image

Maintenant qu'on se base sur un sitemap, il est probablement envisageable de se baser sur les slugs pour l'URL canonique, cf data.gouv.fr (plus fiable que l'indexation aléatoire d'une SPA au changement de slug).

<link rel="canonical" href="/fr/datasets/arbres-dalignement-de-la-metropole-de-lyon/" />   Ca permettrait de mettre une jolie URL complète sur tous les bouquets (nitpick) :

Image

Mais surtout ça met en cohérence le sitemap et les URLs canoniques. Depends #217 pour faire le redirect proprement (id | old_slug -> slug).

TODO : industrialiser le POC sitemap.

Also cf #222 pour les jeux de données si on veut vraiment les supprimer de l'index. Sinon arbitrer sur slug vs id (currently id).

abulte commented 1 month ago

Depuis https://github.com/opendatateam/udata-front-kit/pull/465, les URLs canoniques sont basées sur le slug et c'est en prod.

On sort deuxième sur "Itinéraire fraicheur" dans Google.

Image

Les datasets indexés malgré le robots.txt ne sont probablement pas un problème, à voir sur le long terme (noindex possible).

A priori on est bon, pending #249.

streino commented 3 weeks ago

LGTM. A itérer si besoin.