Catalog / gilles-perrin.com
75

SEO audit for gilles-perrin.com

Gilles Perrin - Auteur Photographe

blog

Health 75/100 (good) · 50 pages crawled · generated 2026-08-26

Download Markdown report (feed to ChatGPT / Claude / Cursor)

Gilles Perrin a photographié sur tous les continents

Screenshot of gilles-perrin.com
50
pages crawled
36
indexable pages
0
errors
89
warnings
221
notices
0
orphan pages
0
broken links
Category breakdown
CategoryScoreErrorsWarningsNotices
Duplicate 77 0 38 0
Performance 78 0 37 59
Agent Readiness 96 0 7 1
Headings 97 0 5 0
Meta Description 99 0 1 21
Structured Data 99 0 1 2
Cache 100 0 0 14
Content 100 0 0 32
Images 100 0 0 1
Links 100 0 0 24
Security 100 0 0 36
Social 100 0 0 30
URL 100 0 0 1
Findings

Warnings (8 rules)

warning Control has no accessible name

Rule agent.control_no_name · Agent Readiness · 7 occurrence(s)

warning Duplicate page content

Rule duplicate.content · Duplicate · 18 occurrence(s)

warning Near-duplicate page content

Rule duplicate.near · Duplicate · 20 occurrence(s)

warning Hero/LCP image is lazy-loaded (loading=lazy delays LCP)

Rule images.no_lazy_lcp_candidate · Performance · 1 occurrence(s)

  • https://www.gilles-perrin.com/ — the likely hero/LCP image (oeil-ok-copie.gif) has loading="lazy" — Google explicitly warns against lazy-loading the LCP image, because it delays the fetch until layout completes. Remove loading="lazy" from the first significant image and add fetchpriority="high" instead.

warning Missing meta description

Rule meta_desc.missing · Meta Description · 1 occurrence(s)

warning Render-blocking script in <head> (no defer/async)

Rule perf.render_blocking · Performance · 36 occurrence(s)

warning Schema describes content not visible on the page

Rule schema.hidden_content · Structured Data · 1 occurrence(s)

  • https://www.gilles-perrin.com/ — a schema name/headline ("Gilles Perrin - Auteur Photographe") does not appear in the page's visible text — Google's policies prohibit marking up content not visible to readers. This is a heuristic (a static-HTML substring check): JS-rendered or abbreviated names can be false positives, so verify before removing.

Notices (15 rules)

notice Heading levels skip a level

Rule agent.heading_skip · Agent Readiness · 1 occurrence(s)

notice Page served uncached (no-store/private or CDN bypass)

Rule cache.not_cacheable · Cache · 14 occurrence(s)

notice Title tag and meta description are identical

Rule content.title_meta_same · Meta Description · 2 occurrence(s)

notice Images without width/height (layout shift / CLS)

Rule images.missing_dimensions · Images · 1 occurrence(s)

notice Internal link has no anchor text / accessible name

Rule links.no_anchor_text · Links · 24 occurrence(s)

notice Missing Open Graph tags

Rule og.missing · Social · 30 occurrence(s)

notice Legacy image format (jpg/png/gif) with no next-gen fallback

Rule perf.images_legacy_format · Performance · 1 occurrence(s)

  • https://www.gilles-perrin.com/ — 1 image(s) use a legacy format (jpg/png/gif) with no next-gen <picture> fallback. Serve WebP or AVIF (with a <picture> typed <source>) to cut image transfer weight and improve LCP.

notice No ETag header (no conditional GET for unchanged pages)

Rule perf.no_etag · Performance · 36 occurrence(s)

  • https://www.gilles-perrin.com/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/afrique/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/afrique/egypte/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/afrique/niger/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/asie/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/asie/chine/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/biographie/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/contact/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/editions/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/europe/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/europe/irlande/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/artisans-de-paris/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/bobigny/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/le-nord/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/les-majorettes/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/limousin/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/france/vielle-aure/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/les-ameriques/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/les-ameriques/perou/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/mentions-legales/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/plan-du-site/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/politique-de-confidentialite/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.
  • https://www.gilles-perrin.com/politique-de-cookies-ue/ — the response carries no ETag header — without an ETag (or Last-Modified) there is no cache-revalidation mechanism, so crawlers re-download the full body every visit. Emit an ETag (a content hash) to enable conditional If-None-Match requests.

notice No Last-Modified header (no conditional GET for unchanged pages)

Rule perf.no_last_modified · Performance · 22 occurrence(s)

  • https://www.gilles-perrin.com/afrique/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/afrique/burkina-faso/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/afrique/egypte/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/afrique/ethiopie/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/afrique/mali/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/afrique/niger/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/asie/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/asie/chine/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/asie/inde/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/asie/tibet/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/asie/triangle-dor/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/contact/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/editions/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/europe/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/france/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/les-ameriques/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/les-ameriques/mexique/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/les-ameriques/michigan/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/les-ameriques/perou/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/mentions-legales/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.
  • https://www.gilles-perrin.com/politique-de-confidentialite/ — the response carries no Last-Modified header — Googlebot can't send an If-Modified-Since request, so it re-downloads the full page body on every crawl even when nothing changed. Emit Last-Modified (or an ETag) on stable pages to enable 304 Not Modified responses.

notice Deprecated schema type with no Google rich result

Rule schema.deprecated_type · Structured Data · 1 occurrence(s)

  • https://www.gilles-perrin.com/ — deprecated rich-result type(s) present: Sitelinks Searchbox. The markup is valid schema.org but Google no longer generates a rich result for it — remove or repurpose the block.

notice FAQPage structured data (rich result removed May 2026)

Rule schema.faq_deprecated · Structured Data · 1 occurrence(s)

  • https://www.gilles-perrin.com/biographie/ — FAQPage structured data is present — Google removed FAQ rich results on 7 May 2026 (except for authoritative government/health sites). The markup is harmless but earns no SERP enhancement; remove it during template maintenance.

notice Missing recommended security headers

Rule security.missing_headers · Security · 36 occurrence(s)

notice Underscores in URL path (prefer hyphens)

Rule url.underscores · URL · 1 occurrence(s)

Pages (showing 50 of 50)
URLStatusIndexableWordsIn-links
https://www.gilles-perrin.com/
Gilles Perrin - Auteur Photographe
200 yes 545 36
https://www.gilles-perrin.com/afrique/
Afrique - Gilles Perrin
200 yes 346 36
https://www.gilles-perrin.com/asie/
Asie - Gilles Perrin - 2026
200 yes 346 36
https://www.gilles-perrin.com/biographie/
Biographie - Gilles Perrin - 2026
200 yes 2249 36
https://www.gilles-perrin.com/contact/
Contact - Gilles Perrin - 2026
200 yes 418 36
https://www.gilles-perrin.com/editions/
Éditions - Gilles Perrin
200 yes 598 36
https://www.gilles-perrin.com/europe/
Europe - Gilles Perrin - 2026
200 yes 343 36
https://www.gilles-perrin.com/france/
France - Gilles Perrin
200 yes 354 36
https://www.gilles-perrin.com/les-ameriques/
Les Amériques - Gilles Perrin
200 yes 345 36
https://www.gilles-perrin.com/mentions-legales/
Mentions légales - Gilles Perrin
200 yes 576 36
https://www.gilles-perrin.com/plan-du-site/
Plan du site - Gilles Perrin
200 yes 397 36
https://www.gilles-perrin.com/politique-de-confidentialite/
Politique de confidentialité - Gilles Perrin
200 yes 989 36
https://www.gilles-perrin.com/france/artisans-de-paris/
Artisans de Paris - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/bobigny/
Bobigny - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/conflans-sainte-honorine/
Conflans-Sainte-Honorine - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/gens-dici/
Gens d’ici - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/le-nord/
Le Nord - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/les-majorettes/
Les Majorettes - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/limousin/
Émigration en Limousin - Gilles Perrin
200 yes 371 10
https://www.gilles-perrin.com/france/vielle-aure/
Vielle-Aure - Gilles Perrin - 2000
200 yes 375 10
https://www.gilles-perrin.com/afrique/burkina-faso/
Burkina-Faso - Gilles Perrin
200 yes 351 7
https://www.gilles-perrin.com/afrique/egypte/
Égypte - Gilles Perrin
200 yes 355 7
https://www.gilles-perrin.com/afrique/ethiopie/
Éthiopie - Gilles Perrin
200 yes 351 7
https://www.gilles-perrin.com/afrique/mali/
Mali - Gilles Perrin
200 yes 351 7
https://www.gilles-perrin.com/afrique/niger/
Niger - Gilles Perrin
200 yes 351 7
https://www.gilles-perrin.com/asie/chine/
Chine - Gilles Perrin - 2026
200 yes 359 6
https://www.gilles-perrin.com/asie/inde/
Inde - Gilles Perrin
200 yes 351 6
https://www.gilles-perrin.com/asie/tibet/
Tibet - Gilles Perrin - 2026
200 yes 351 6
https://www.gilles-perrin.com/asie/triangle-dor/
Triangle d’or - Gilles Perrin
200 yes 359 6
https://www.gilles-perrin.com/les-ameriques/mexique/
Mexique - Gilles Perrin
200 yes 348 5
https://www.gilles-perrin.com/les-ameriques/michigan/
Michigan - Gilles Perrin
200 yes 348 5
https://www.gilles-perrin.com/les-ameriques/perou/
Pérou - Gilles Perrin
200 yes 348 5
https://www.gilles-perrin.com/europe/finlande/
Finlande - Gilles Perrin - 2026
200 yes 345 4
https://www.gilles-perrin.com/europe/irlande/
Irlande - Gilles Perrin - 2026
200 yes 345 4
https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/
Gilles Perrin - Gilles Perrin
200 yes 362 1
https://www.gilles-perrin.com/politique-de-cookies-ue/
Politique de cookies (UE) - Gilles Perrin
200 yes 1305 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/001-56.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/002-29.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/003-47.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/004-15.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/005-01.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/006-02.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/007-51.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/008-53.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/009-37.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/010-39.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/011-40.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/012-61.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/013-14.jpg 200 no 0 1
https://www.gilles-perrin.com/wp-content/uploads/2026/02/014-45.jpg 200 no 0 1

Audit your own site — free

157 checks, internal PageRank, render-diff. No signup, results in ~30s.

Scan your site →