SEO audit for gilles-perrin.com
Gilles Perrin - Auteur Photographe
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
| Category | Score | Errors | Warnings | Notices |
|---|---|---|---|---|
| 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 |
Warnings (8 rules)
warning Control has no accessible name
Rule agent.control_no_name · Agent Readiness · 7 occurrence(s)
- https://www.gilles-perrin.com/ — 1 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/afrique/burkina-faso/ — 1 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/biographie/ — 7 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/france/artisans-de-paris/ — 1 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/france/bobigny/ — 2 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — 53 button/link(s) with no text or aria-label — an agent can't target them
- https://www.gilles-perrin.com/france/limousin/ — 1 button/link(s) with no text or aria-label — an agent can't target them
warning Duplicate page content
Rule duplicate.content · Duplicate · 18 occurrence(s)
- https://www.gilles-perrin.com/afrique/burkina-faso/ — content shared by 4 pages: https://www.gilles-perrin.com/afrique/niger/, https://www.gilles-perrin.com/afrique/ethiopie/, https://www.gilles-perrin.com/afrique/mali/
- https://www.gilles-perrin.com/afrique/ethiopie/ — content shared by 4 pages: https://www.gilles-perrin.com/afrique/niger/, https://www.gilles-perrin.com/afrique/burkina-faso/, https://www.gilles-perrin.com/afrique/mali/
- https://www.gilles-perrin.com/afrique/mali/ — content shared by 4 pages: https://www.gilles-perrin.com/afrique/niger/, https://www.gilles-perrin.com/afrique/ethiopie/, https://www.gilles-perrin.com/afrique/burkina-faso/
- https://www.gilles-perrin.com/afrique/niger/ — content shared by 4 pages: https://www.gilles-perrin.com/afrique/ethiopie/, https://www.gilles-perrin.com/afrique/burkina-faso/, https://www.gilles-perrin.com/afrique/mali/
- https://www.gilles-perrin.com/asie/inde/ — content shared by 2 pages: https://www.gilles-perrin.com/asie/tibet/
- https://www.gilles-perrin.com/asie/tibet/ — content shared by 2 pages: https://www.gilles-perrin.com/asie/inde/
- https://www.gilles-perrin.com/europe/finlande/ — content shared by 2 pages: https://www.gilles-perrin.com/europe/irlande/
- https://www.gilles-perrin.com/europe/irlande/ — content shared by 2 pages: https://www.gilles-perrin.com/europe/finlande/
- https://www.gilles-perrin.com/france/artisans-de-paris/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/le-nord/, https://www.gilles-perrin.com/france/les-majorettes/
- https://www.gilles-perrin.com/france/bobigny/ — content shared by 7 pages: https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/le-nord/, https://www.gilles-perrin.com/france/les-majorettes/
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/le-nord/
- https://www.gilles-perrin.com/france/gens-dici/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/le-nord/
- https://www.gilles-perrin.com/france/le-nord/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/les-majorettes/
- https://www.gilles-perrin.com/france/les-majorettes/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/le-nord/
- https://www.gilles-perrin.com/france/limousin/ — content shared by 7 pages: https://www.gilles-perrin.com/france/bobigny/, https://www.gilles-perrin.com/france/artisans-de-paris/, https://www.gilles-perrin.com/france/le-nord/
- https://www.gilles-perrin.com/les-ameriques/mexique/ — content shared by 3 pages: https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/les-ameriques/michigan/
- https://www.gilles-perrin.com/les-ameriques/michigan/ — content shared by 3 pages: https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/les-ameriques/mexique/
- https://www.gilles-perrin.com/les-ameriques/perou/ — content shared by 3 pages: https://www.gilles-perrin.com/les-ameriques/michigan/, https://www.gilles-perrin.com/les-ameriques/mexique/
warning Near-duplicate page content
Rule duplicate.near · Duplicate · 20 occurrence(s)
- https://www.gilles-perrin.com/afrique/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/afrique/burkina-faso/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/afrique/egypte/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/, https://www.gilles-perrin.com/europe/irlande/
- https://www.gilles-perrin.com/afrique/ethiopie/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/afrique/mali/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/afrique/niger/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/asie/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/asie/chine/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/europe/irlande/
- https://www.gilles-perrin.com/asie/inde/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/asie/tibet/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/asie/triangle-dor/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/europe/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/europe/finlande/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/europe/irlande/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/france/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/les-ameriques/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/les-ameriques/mexique/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/les-ameriques/michigan/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/les-ameriques/perou/, https://www.gilles-perrin.com/asie/chine/
- https://www.gilles-perrin.com/les-ameriques/perou/ — near-duplicate of 19 page(s): https://www.gilles-perrin.com/afrique/egypte/, https://www.gilles-perrin.com/asie/chine/, https://www.gilles-perrin.com/europe/irlande/
warning Missing <h1>
Rule h1.missing · Headings · 5 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)
- https://www.gilles-perrin.com/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/afrique/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/afrique/egypte/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/afrique/niger/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/asie/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/asie/chine/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/biographie/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/contact/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/editions/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/europe/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/europe/irlande/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/artisans-de-paris/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/bobigny/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/le-nord/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/les-majorettes/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/limousin/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/france/vielle-aure/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/les-ameriques/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/les-ameriques/perou/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/mentions-legales/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/plan-du-site/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/politique-de-confidentialite/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
- https://www.gilles-perrin.com/politique-de-cookies-ue/ — 1 render-blocking <script> in <head> (add defer/async or use type=module)
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)
- https://www.gilles-perrin.com/editions/ — h3 follows h1 — skips h2
notice Page served uncached (no-store/private or CDN bypass)
Rule cache.not_cacheable · Cache · 14 occurrence(s)
- https://www.gilles-perrin.com/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/biographie/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/europe/finlande/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/europe/irlande/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/artisans-de-paris/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/bobigny/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/gens-dici/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/le-nord/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/les-majorettes/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/limousin/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/france/vielle-aure/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/plan-du-site/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
- https://www.gilles-perrin.com/politique-de-cookies-ue/ — Cache-Control: max-age=0, no-cache, no-store, must-revalidate · cdn: MISS
notice Low text-to-HTML ratio
Rule content.low_ratio · Content · 32 occurrence(s)
- https://www.gilles-perrin.com/ — 4.5%
- https://www.gilles-perrin.com/afrique/ — 3.0%
- https://www.gilles-perrin.com/afrique/egypte/ — 2.3%
- https://www.gilles-perrin.com/afrique/ethiopie/ — 2.5%
- https://www.gilles-perrin.com/afrique/niger/ — 2.5%
- https://www.gilles-perrin.com/asie/ — 3.1%
- https://www.gilles-perrin.com/asie/chine/ — 2.3%
- https://www.gilles-perrin.com/asie/inde/ — 2.6%
- https://www.gilles-perrin.com/asie/tibet/ — 2.5%
- https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — 3.8%
- https://www.gilles-perrin.com/contact/ — 3.2%
- https://www.gilles-perrin.com/editions/ — 4.5%
- https://www.gilles-perrin.com/europe/ — 3.1%
- https://www.gilles-perrin.com/europe/irlande/ — 2.2%
- https://www.gilles-perrin.com/france/ — 3.0%
- https://www.gilles-perrin.com/france/artisans-de-paris/ — 2.5%
- https://www.gilles-perrin.com/france/bobigny/ — 2.8%
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — 2.4%
- https://www.gilles-perrin.com/france/le-nord/ — 2.7%
- https://www.gilles-perrin.com/france/les-majorettes/ — 2.9%
- https://www.gilles-perrin.com/france/limousin/ — 2.5%
- https://www.gilles-perrin.com/france/vielle-aure/ — 2.2%
- https://www.gilles-perrin.com/les-ameriques/ — 3.1%
- https://www.gilles-perrin.com/les-ameriques/perou/ — 2.4%
- https://www.gilles-perrin.com/plan-du-site/ — 3.6%
notice Title tag and meta description are identical
Rule content.title_meta_same · Meta Description · 2 occurrence(s)
- https://www.gilles-perrin.com/les-ameriques/michigan/ — the meta description is identical to the <title> — write a distinct description to control the SERP snippet
- https://www.gilles-perrin.com/mentions-legales/ — the meta description is identical to the <title> — write a distinct description to control the SERP snippet
notice Images without width/height (layout shift / CLS)
Rule images.missing_dimensions · Images · 1 occurrence(s)
- https://www.gilles-perrin.com/ — 1 of 2 images without width/height
notice Internal link has no anchor text / accessible name
Rule links.no_anchor_text · Links · 24 occurrence(s)
- https://www.gilles-perrin.com/ — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/afrique/burkina-faso/ — 14 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/afrique/egypte/ — 64 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/afrique/ethiopie/ — 41 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/afrique/mali/ — 47 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/afrique/niger/ — 38 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/asie/chine/ — 62 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/asie/inde/ — 29 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/asie/tibet/ — 38 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/asie/triangle-dor/ — 1 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/biographie/ — 9 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/europe/finlande/ — 24 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/europe/irlande/ — 66 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/artisans-de-paris/ — 43 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/bobigny/ — 24 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — 53 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/gens-dici/ — 21 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/le-nord/ — 25 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/les-majorettes/ — 16 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/limousin/ — 45 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/france/vielle-aure/ — 77 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/les-ameriques/mexique/ — 19 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/les-ameriques/michigan/ — 24 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
- https://www.gilles-perrin.com/les-ameriques/perou/ — 49 internal link(s) have no anchor text, aria-label, or image alt — they pass no keyword signal and are unusable to screen readers. Add descriptive text or an aria-label.
notice Meta description too short
Rule meta_desc.too_short · Meta Description · 19 occurrence(s)
- https://www.gilles-perrin.com/afrique/ — 49 chars
- https://www.gilles-perrin.com/afrique/egypte/ — 47 chars
- https://www.gilles-perrin.com/biographie/ — 24 chars
- https://www.gilles-perrin.com/contact/ — 21 chars
- https://www.gilles-perrin.com/editions/ — 37 chars
- https://www.gilles-perrin.com/france/ — 30 chars
- https://www.gilles-perrin.com/france/artisans-de-paris/ — 41 chars
- https://www.gilles-perrin.com/france/bobigny/ — 43 chars
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — 48 chars
- https://www.gilles-perrin.com/france/le-nord/ — 31 chars
- https://www.gilles-perrin.com/france/les-majorettes/ — 38 chars
- https://www.gilles-perrin.com/france/limousin/ — 32 chars
- https://www.gilles-perrin.com/les-ameriques/mexique/ — 28 chars
- https://www.gilles-perrin.com/les-ameriques/michigan/ — 24 chars
- https://www.gilles-perrin.com/les-ameriques/perou/ — 47 chars
- https://www.gilles-perrin.com/mentions-legales/ — 32 chars
- https://www.gilles-perrin.com/plan-du-site/ — 26 chars
- https://www.gilles-perrin.com/politique-de-confidentialite/ — 28 chars
- https://www.gilles-perrin.com/politique-de-cookies-ue/ — 36 chars
notice Missing Open Graph tags
Rule og.missing · Social · 30 occurrence(s)
- https://www.gilles-perrin.com/afrique/egypte/ — og:image
- https://www.gilles-perrin.com/afrique/ethiopie/ — og:image
- https://www.gilles-perrin.com/afrique/niger/ — og:image
- https://www.gilles-perrin.com/asie/ — og:image
- https://www.gilles-perrin.com/asie/chine/ — og:image
- https://www.gilles-perrin.com/asie/inde/ — og:image
- https://www.gilles-perrin.com/asie/tibet/ — og:image
- https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — og:description, og:image
- https://www.gilles-perrin.com/biographie/ — og:image
- https://www.gilles-perrin.com/editions/ — og:image
- https://www.gilles-perrin.com/europe/irlande/ — og:image
- https://www.gilles-perrin.com/france/artisans-de-paris/ — og:image
- https://www.gilles-perrin.com/france/bobigny/ — og:image
- https://www.gilles-perrin.com/france/conflans-sainte-honorine/ — og:image
- https://www.gilles-perrin.com/france/le-nord/ — og:image
- https://www.gilles-perrin.com/france/les-majorettes/ — og:image
- https://www.gilles-perrin.com/france/limousin/ — og:image
- https://www.gilles-perrin.com/france/vielle-aure/ — og:image
- https://www.gilles-perrin.com/les-ameriques/mexique/ — og:image
- https://www.gilles-perrin.com/les-ameriques/michigan/ — og:image
- https://www.gilles-perrin.com/les-ameriques/perou/ — og:image
- https://www.gilles-perrin.com/mentions-legales/ — og:image
- https://www.gilles-perrin.com/plan-du-site/ — og:image
- https://www.gilles-perrin.com/politique-de-confidentialite/ — og:image
- https://www.gilles-perrin.com/politique-de-cookies-ue/ — og:image
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)
- https://www.gilles-perrin.com/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/afrique/ — X-Content-Type-Options
- https://www.gilles-perrin.com/afrique/egypte/ — X-Content-Type-Options
- https://www.gilles-perrin.com/afrique/niger/ — X-Content-Type-Options
- https://www.gilles-perrin.com/asie/ — X-Content-Type-Options
- https://www.gilles-perrin.com/asie/chine/ — X-Content-Type-Options
- https://www.gilles-perrin.com/author/gillesnicoleperrin_ray542lq/ — X-Content-Type-Options
- https://www.gilles-perrin.com/biographie/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/contact/ — X-Content-Type-Options
- https://www.gilles-perrin.com/editions/ — X-Content-Type-Options
- https://www.gilles-perrin.com/europe/ — X-Content-Type-Options
- https://www.gilles-perrin.com/europe/irlande/ — X-Content-Type-Options, CSP
- https://www.gilles-perrin.com/france/ — X-Content-Type-Options
- https://www.gilles-perrin.com/france/artisans-de-paris/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/france/bobigny/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/france/le-nord/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/france/les-majorettes/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/france/limousin/ — X-Content-Type-Options, CSP
- https://www.gilles-perrin.com/france/vielle-aure/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/les-ameriques/ — X-Content-Type-Options
- https://www.gilles-perrin.com/les-ameriques/perou/ — X-Content-Type-Options
- https://www.gilles-perrin.com/mentions-legales/ — X-Content-Type-Options
- https://www.gilles-perrin.com/plan-du-site/ — CSP, X-Content-Type-Options
- https://www.gilles-perrin.com/politique-de-confidentialite/ — X-Content-Type-Options
- https://www.gilles-perrin.com/politique-de-cookies-ue/ — X-Content-Type-Options, CSP
notice Underscores in URL path (prefer hyphens)
Rule url.underscores · URL · 1 occurrence(s)
Audit your own site — free
157 checks, internal PageRank, render-diff. No signup, results in ~30s.