SEO audit for bonsecours66.com
Notre-Dame de Bon Secours | Lycée et campus à Perpignan (66)
Health 65/100 (fair) · 17 pages crawled · generated 2026-07-12
Download Markdown report (feed to ChatGPT / Claude / Cursor)Établissement privé catholique à Perpignan depuis 1871. 1 600 apprenants, lycée (100% au bac) et campus supérieur (BTS, Licences, Masters en alternance).
| Category | Score | Errors | Warnings | Notices |
|---|---|---|---|---|
| Structured Data | 68 | 0 | 18 | 4 |
| Duplicate | 72 | 0 | 16 | 8 |
| Performance | 89 | 0 | 6 | 60 |
| Links | 95 | 0 | 3 | 2 |
| Canonical | 98 | 0 | 1 | 5 |
| Headings | 98 | 0 | 1 | 0 |
| Agent Readiness | 100 | 0 | 0 | 16 |
| Cache | 100 | 0 | 0 | 17 |
| Crawlability | 100 | 0 | 0 | 1 |
| Images | 100 | 0 | 0 | 17 |
| Security | 100 | 0 | 0 | 8 |
| Sitemap | 100 | 0 | 0 | 1 |
| Social | 100 | 0 | 0 | 2 |
| Titles | 100 | 0 | 0 | 1 |
| URL | 100 | 0 | 0 | 4 |
Warnings (9 rules)
warning Missing canonical tag
Rule canonical.missing · Canonical · 1 occurrence(s)
warning Duplicate page content
Rule duplicate.content · Duplicate · 8 occurrence(s)
- https://bonsecours66.com/ — content shared by 2 pages: https://www.bonsecours66.com/
- https://bonsecours66.com/content/contact — content shared by 2 pages: https://bonsecours66.com/content/contact.php
- https://bonsecours66.com/content/contact.php — content shared by 2 pages: https://bonsecours66.com/content/contact
- https://bonsecours66.com/content/journees-portes-ouvertes — content shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes.php
- https://bonsecours66.com/content/journees-portes-ouvertes.php — content shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes
- https://bonsecours66.com/content/tarif — content shared by 2 pages: https://bonsecours66.com/content/tarif.php
- https://bonsecours66.com/content/tarif.php — content shared by 2 pages: https://bonsecours66.com/content/tarif
- https://www.bonsecours66.com/ — content shared by 2 pages: https://bonsecours66.com/
warning Duplicate <title> across pages
Rule duplicate.title · Duplicate · 8 occurrence(s)
- https://bonsecours66.com/ — title shared by 2 pages: https://www.bonsecours66.com/
- https://bonsecours66.com/content/contact — title shared by 2 pages: https://bonsecours66.com/content/contact.php
- https://bonsecours66.com/content/contact.php — title shared by 2 pages: https://bonsecours66.com/content/contact
- https://bonsecours66.com/content/journees-portes-ouvertes — title shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes.php
- https://bonsecours66.com/content/journees-portes-ouvertes.php — title shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes
- https://bonsecours66.com/content/tarif — title shared by 2 pages: https://bonsecours66.com/content/tarif.php
- https://bonsecours66.com/content/tarif.php — title shared by 2 pages: https://bonsecours66.com/content/tarif
- https://www.bonsecours66.com/ — title shared by 2 pages: https://bonsecours66.com/
warning Missing <h1>
Rule h1.missing · Headings · 1 occurrence(s)
warning Hero/LCP image is lazy-loaded (loading=lazy delays LCP)
Rule images.no_lazy_lcp_candidate · Performance · 6 occurrence(s)
- https://bonsecours66.com/ — the likely hero/LCP image (logo_ndbs_cmjn_logo_bs_mono_blc.webp) 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.
- https://bonsecours66.com/content/journees-portes-ouvertes — the likely hero/LCP image (dscf1231.jpg) 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.
- https://bonsecours66.com/content/journees-portes-ouvertes.php — the likely hero/LCP image (dscf1231.jpg) 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.
- https://bonsecours66.com/content/revue_de_presse — the likely hero/LCP image (logo_ndbs_cmjn_logo_bs_mono_blc.webp) 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.
- https://bonsecours66.com/revue_de_presse — the likely hero/LCP image (logo_ndbs_cmjn_logo_bs_mono_blc.webp) 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.
- https://www.bonsecours66.com/ — the likely hero/LCP image (logo_ndbs_cmjn_logo_bs_mono_blc.webp) 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 Orphan page (no internal inlinks)
Rule links.orphan · Links · 2 occurrence(s)
- https://bonsecours66.com/content/inscription-jpo-campus — no internal links point here
- https://bonsecours66.com/content/revue_de_presse — no internal links point here
warning Internal link points to a redirect
Rule links.redirect_target · Links · 1 occurrence(s)
- https://bonsecours66.com/content/politique-protection-donnees — https://www.bonsecours66.com/ → https://bonsecours66.com/
warning Schema describes content not visible on the page
Rule schema.hidden_content · Structured Data · 16 occurrence(s)
- https://bonsecours66.com/ — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/contact — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/contact.php — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/inscription-alternance — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/inscriptions-campus — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/inscriptions-lycee — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/journees-portes-ouvertes — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/journees-portes-ouvertes.php — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/mentions-legales — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/politique-protection-donnees — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/revue_de_presse — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/tarif — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/tarif.php — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/content/tarif_iPad — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://bonsecours66.com/revue_de_presse — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
- https://www.bonsecours66.com/ — a schema name/headline ("Notre-Dame de Bon Secours Perpignan") 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.
warning Structured-data date has already passed (stale event/job/offer)
Rule schema.stale_date · Structured Data · 2 occurrence(s)
- https://bonsecours66.com/content/journees-portes-ouvertes — Event.startDate is in the past (2026-03-20T16:00:00+01:00) — Google may stop showing this event/job/offer in rich results. Update the date or remove the markup from expired content.
- https://bonsecours66.com/content/journees-portes-ouvertes.php — Event.startDate is in the past (2026-03-20T16:00:00+01:00) — Google may stop showing this event/job/offer in rich results. Update the date or remove the markup from expired content.
Notices (22 rules)
notice No main landmark for AI agents
Rule agent.no_main_landmark · Agent Readiness · 16 occurrence(s)
- https://bonsecours66.com/ — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/contact — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/contact.php — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/inscription-alternance — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/inscription-jpo-campus — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/inscriptions-campus — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/inscriptions-lycee — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/journees-portes-ouvertes — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/journees-portes-ouvertes.php — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/mentions-legales — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/politique-protection-donnees — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/revue_de_presse — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/tarif — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/content/tarif.php — add a <main> element (or role=main) around the primary content
- https://bonsecours66.com/revue_de_presse — add a <main> element (or role=main) around the primary content
- https://www.bonsecours66.com/ — add a <main> element (or role=main) around the primary content
notice Page served uncached (no-store/private or CDN bypass)
Rule cache.not_cacheable · Cache · 17 occurrence(s)
- https://bonsecours66.com/ — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/contact — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/contact.php — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/inscription-alternance — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/inscription-jpo-campus — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/inscriptions-campus — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/inscriptions-lycee — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/journees-portes-ouvertes — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/journees-portes-ouvertes.php — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/mentions-legales — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/politique-protection-donnees — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/revue_de_presse — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/tarif — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/tarif.php — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/content/tarif_iPad — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://bonsecours66.com/revue_de_presse — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
- https://www.bonsecours66.com/ — Cache-Control: public, max-age=300, stale-while-revalidate=60 · cloudflare: DYNAMIC
notice Canonical target reachable only via a canonical tag (no inlinks)
Rule canonical.isolated_url · Canonical · 2 occurrence(s)
- https://bonsecours66.com/content/contact — this URL is a canonical target but has no internal links pointing to it — crawlers only learn of it via the canonical tag. Add direct internal links (or list it in the sitemap).
- https://bonsecours66.com/content/journees-portes-ouvertes — this URL is a canonical target but has no internal links pointing to it — crawlers only learn of it via the canonical tag. Add direct internal links (or list it in the sitemap).
notice Canonical points to a different URL
Rule canonical.non_self · Canonical · 3 occurrence(s)
- https://bonsecours66.com/content/contact.php — canonical=https://bonsecours66.com/content/contact
- https://bonsecours66.com/content/journees-portes-ouvertes.php — canonical=https://bonsecours66.com/content/journees-portes-ouvertes
- https://bonsecours66.com/content/tarif.php — canonical=https://bonsecours66.com/content/tarif
notice Duplicate meta description across pages
Rule duplicate.meta_desc · Duplicate · 8 occurrence(s)
- https://bonsecours66.com/ — meta description shared by 2 pages: https://www.bonsecours66.com/
- https://bonsecours66.com/content/contact — meta description shared by 2 pages: https://bonsecours66.com/content/contact.php
- https://bonsecours66.com/content/contact.php — meta description shared by 2 pages: https://bonsecours66.com/content/contact
- https://bonsecours66.com/content/journees-portes-ouvertes — meta description shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes.php
- https://bonsecours66.com/content/journees-portes-ouvertes.php — meta description shared by 2 pages: https://bonsecours66.com/content/journees-portes-ouvertes
- https://bonsecours66.com/content/tarif — meta description shared by 2 pages: https://bonsecours66.com/content/tarif.php
- https://bonsecours66.com/content/tarif.php — meta description shared by 2 pages: https://bonsecours66.com/content/tarif
- https://www.bonsecours66.com/ — meta description shared by 2 pages: https://bonsecours66.com/
notice Likely hero image lacks fetchpriority=high
Rule images.hero_no_fetchpriority · Performance · 9 occurrence(s)
- https://bonsecours66.com/content/contact — the likely hero/LCP image (dscf1149%201.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/contact.php — the likely hero/LCP image (dscf1149%201.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/inscription-jpo-campus — the likely hero/LCP image (logo_ndbs_cmjn_logo_bs_mono_blc.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/inscriptions-campus — the likely hero/LCP image (dscf1231.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/inscriptions-lycee — the likely hero/LCP image (dscf1231.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/mentions-legales — the likely hero/LCP image (dscf1149%201.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/politique-protection-donnees — the likely hero/LCP image (dscf1149%201.jpg) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/tarif — the likely hero/LCP image (telecharger-sur-le-lecteur-de-stockage.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
- https://bonsecours66.com/content/tarif.php — the likely hero/LCP image (telecharger-sur-le-lecteur-de-stockage.png) has no fetchpriority="high" — adding it tells the browser to fetch the hero earlier in the waterfall, reducing Largest Contentful Paint. This is a low-severity nudge; verify the flagged image is actually your LCP element.
notice Images without width/height (layout shift / CLS)
Rule images.missing_dimensions · Images · 17 occurrence(s)
- https://bonsecours66.com/ — 25 of 28 images without width/height
- https://bonsecours66.com/content/contact — 4 of 7 images without width/height
- https://bonsecours66.com/content/contact.php — 4 of 7 images without width/height
- https://bonsecours66.com/content/inscription-alternance — 2 of 5 images without width/height
- https://bonsecours66.com/content/inscription-jpo-campus — 1 of 1 images without width/height
- https://bonsecours66.com/content/inscriptions-campus — 3 of 6 images without width/height
- https://bonsecours66.com/content/inscriptions-lycee — 4 of 7 images without width/height
- https://bonsecours66.com/content/journees-portes-ouvertes — 7 of 10 images without width/height
- https://bonsecours66.com/content/journees-portes-ouvertes.php — 7 of 10 images without width/height
- https://bonsecours66.com/content/mentions-legales — 3 of 6 images without width/height
- https://bonsecours66.com/content/politique-protection-donnees — 3 of 6 images without width/height
- https://bonsecours66.com/content/revue_de_presse — 15 of 18 images without width/height
- https://bonsecours66.com/content/tarif — 4 of 7 images without width/height
- https://bonsecours66.com/content/tarif.php — 4 of 7 images without width/height
- https://bonsecours66.com/content/tarif_iPad — 2 of 5 images without width/height
- https://bonsecours66.com/revue_de_presse — 76 of 78 images without width/height
- https://www.bonsecours66.com/ — 25 of 28 images without width/height
notice Page has only one internal inlink (fragile crawl path)
Rule links.single_inlink · Links · 2 occurrence(s)
- https://bonsecours66.com/content/inscription-alternance — only one internal link points here — if that source changes, this page becomes an orphan. Add more contextual internal links to strengthen the crawl path.
- https://www.bonsecours66.com/ — only one internal link points here — if that source changes, this page becomes an orphan. Add more contextual internal links to strengthen the crawl path.
notice Missing Open Graph tags
Rule og.missing · Social · 1 occurrence(s)
- https://bonsecours66.com/content/inscription-jpo-campus — og:title, og:description, og:image
notice Legacy image format (jpg/png/gif) with no next-gen fallback
Rule perf.images_legacy_format · Performance · 17 occurrence(s)
- https://bonsecours66.com/ — 12 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.
- https://bonsecours66.com/content/contact — 4 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.
- https://bonsecours66.com/content/contact.php — 4 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.
- https://bonsecours66.com/content/inscription-alternance — 2 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.
- https://bonsecours66.com/content/inscription-jpo-campus — 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.
- https://bonsecours66.com/content/inscriptions-campus — 3 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.
- https://bonsecours66.com/content/inscriptions-lycee — 4 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.
- https://bonsecours66.com/content/journees-portes-ouvertes — 7 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.
- https://bonsecours66.com/content/journees-portes-ouvertes.php — 7 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.
- https://bonsecours66.com/content/mentions-legales — 3 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.
- https://bonsecours66.com/content/politique-protection-donnees — 3 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.
- https://bonsecours66.com/content/revue_de_presse — 14 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.
- https://bonsecours66.com/content/tarif — 4 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.
- https://bonsecours66.com/content/tarif.php — 4 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.
- https://bonsecours66.com/content/tarif_iPad — 2 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.
- https://bonsecours66.com/revue_de_presse — 42 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.
- https://www.bonsecours66.com/ — 12 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 · 17 occurrence(s)
- https://bonsecours66.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://bonsecours66.com/content/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://bonsecours66.com/content/contact.php — 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://bonsecours66.com/content/inscription-alternance — 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://bonsecours66.com/content/inscription-jpo-campus — 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://bonsecours66.com/content/inscriptions-campus — 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://bonsecours66.com/content/inscriptions-lycee — 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://bonsecours66.com/content/journees-portes-ouvertes — 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://bonsecours66.com/content/journees-portes-ouvertes.php — 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://bonsecours66.com/content/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://bonsecours66.com/content/politique-protection-donnees — 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://bonsecours66.com/content/revue_de_presse — 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://bonsecours66.com/content/tarif — 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://bonsecours66.com/content/tarif.php — 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://bonsecours66.com/content/tarif_iPad — 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://bonsecours66.com/revue_de_presse — 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.bonsecours66.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.
notice No Last-Modified header (no conditional GET for unchanged pages)
Rule perf.no_last_modified · Performance · 17 occurrence(s)
- https://bonsecours66.com/ — 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://bonsecours66.com/content/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://bonsecours66.com/content/contact.php — 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://bonsecours66.com/content/inscription-alternance — 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://bonsecours66.com/content/inscription-jpo-campus — 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://bonsecours66.com/content/inscriptions-campus — 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://bonsecours66.com/content/inscriptions-lycee — 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://bonsecours66.com/content/journees-portes-ouvertes — 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://bonsecours66.com/content/journees-portes-ouvertes.php — 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://bonsecours66.com/content/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://bonsecours66.com/content/politique-protection-donnees — 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://bonsecours66.com/content/revue_de_presse — 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://bonsecours66.com/content/tarif — 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://bonsecours66.com/content/tarif.php — 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://bonsecours66.com/content/tarif_iPad — 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://bonsecours66.com/revue_de_presse — 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.bonsecours66.com/ — 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 URL redirects to another URL
Rule redirect.single · Crawlability · 1 occurrence(s)
- https://www.bonsecours66.com/ — redirects to https://bonsecours66.com/
notice Deep page has no BreadcrumbList structured data
Rule schema.breadcrumb_missing · Structured Data · 1 occurrence(s)
- https://www.bonsecours66.com/ — depth-2 page has structured data but no BreadcrumbList
notice FAQPage structured data (rich result removed May 2026)
Rule schema.faq_deprecated · Structured Data · 2 occurrence(s)
- https://bonsecours66.com/ — 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.
- https://www.bonsecours66.com/ — 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 No structured data detected
Rule schema.none · Structured Data · 1 occurrence(s)
notice target=_blank link without rel=noopener (tab-napping)
Rule security.unsafe_cross_origin_links · Security · 8 occurrence(s)
- https://bonsecours66.com/ — 2 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/content/contact — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/content/contact.php — 1 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/content/inscriptions-campus — 3 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/content/inscriptions-lycee — 4 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/content/revue_de_presse — 2 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://bonsecours66.com/revue_de_presse — 2 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
- https://www.bonsecours66.com/ — 2 external link(s) use target="_blank" without rel="noopener" — the opened page can hijack your tab (reverse tab-napping). Add rel="noopener noreferrer".
notice Indexable page not listed in sitemap
Rule sitemap.orphan_not_listed · Sitemap · 1 occurrence(s)
- https://bonsecours66.com/revue_de_presse — indexable but not in sitemap
notice Title tag is identical to the H1 (missed keyword variation)
Rule title.same_as_h1 · Titles · 1 occurrence(s)
- https://bonsecours66.com/content/revue_de_presse — the <title> and the H1 are identical — differentiate them to cover more query variation
notice Missing Twitter Card tag
Rule twitter.missing · Social · 1 occurrence(s)
notice Underscores in URL path (prefer hyphens)
Rule url.underscores · URL · 3 occurrence(s)
notice Uppercase letters in URL path
Rule url.uppercase · URL · 1 occurrence(s)
| URL | Status | Indexable | Words | In-links |
|---|---|---|---|---|
| https://bonsecours66.com/ Notre-Dame de Bon Secours | Lycée et campus à Perpignan (66) |
200 | yes | 791 | 16 |
| https://bonsecours66.com/content/contact.php Contact | Notre-Dame de Bon Secours Perpignan |
200 | yes | 409 | 16 |
| https://bonsecours66.com/content/inscriptions-campus Inscriptions campus | Notre-Dame de Bon Secours Perpignan |
200 | yes | 450 | 16 |
| https://bonsecours66.com/content/inscriptions-lycee Inscriptions lycée | Notre-Dame de Bon Secours Perpignan |
200 | yes | 484 | 16 |
| https://bonsecours66.com/content/journees-portes-ouvertes.php Journées Portes Ouvertes | Bon Secours Perpignan |
200 | yes | 299 | 16 |
| https://bonsecours66.com/content/tarif.php Tarifs scolarité | Notre-Dame de Bon Secours Perpignan |
200 | yes | 250 | 16 |
| https://bonsecours66.com/content/tarif_iPad Tarifs iPad | Notre-Dame de Bon Secours Perpignan |
200 | yes | 553 | 16 |
| https://bonsecours66.com/content/politique-protection-donnees Politique de protection des données | Bon Secours |
200 | yes | 2682 | 16 |
| https://bonsecours66.com/content/mentions-legales Mentions légales | Notre-Dame de Bon Secours |
200 | yes | 777 | 15 |
| https://bonsecours66.com/content/tarif Tarifs scolarité | Notre-Dame de Bon Secours Perpignan |
200 | yes | 250 | 15 |
| https://bonsecours66.com/revue_de_presse Revue de presse | Notre-Dame de Bon Secours Perpignan |
200 | yes | 716 | 15 |
| https://bonsecours66.com/content/inscription-alternance Candidater en alternance | Bon Secours Perpignan |
200 | yes | 415 | 1 |
| https://www.bonsecours66.com/ Notre-Dame de Bon Secours | Lycée et campus à Perpignan (66) |
200 | yes | 791 | 1 |
| https://bonsecours66.com/content/contact Contact | Notre-Dame de Bon Secours Perpignan |
200 | yes | 409 | 0 |
| https://bonsecours66.com/content/inscription-jpo-campus Inscription Portes Ouvertes du Campus - Bonsecours 66 |
200 | yes | 414 | 0 |
| https://bonsecours66.com/content/journees-portes-ouvertes Journées Portes Ouvertes | Bon Secours Perpignan |
200 | yes | 299 | 0 |
| https://bonsecours66.com/content/revue_de_presse Revue de presse |
200 | yes | 870 | 0 |
Audit your own site — free
77 checks, internal PageRank, render-diff. No signup, results in ~30s.