◆QA Engine
← All runs

https://artificialatheist.com

Export JSON
page started 2026-08-01 03:06 UTC · finished 2026-08-01 03:15 UTC · 20 pages · 531s scan · status done · #89c8f70ee8ed42228e96cb99affd14fb
22 distinct issues Grouped by rule across all scanned pages, worst severity first. Click the severity pills above to filter.
serious ux ux/lighthouse/performance 18 pages
Lighthouse Performance score: 0.4
Lighthouse category 'Performance' scored 0.4 (0-1 scale).
Affected pages (18)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "serious",
    "title": "Lighthouse Performance score: 0.4",
    "evidence": {
      "category": "performance",
      "score": 0.4
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.58",
    "evidence": {
      "category": "performance",
      "score": 0.58
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "serious",
    "title": "Lighthouse Performance score: 0.38",
    "evidence": {
      "category": "performance",
      "score": 0.38
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "serious",
    "title": "Lighthouse Performance score: 0.42",
    "evidence": {
      "category": "performance",
      "score": 0.42
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.62",
    "evidence": {
      "category": "performance",
      "score": 0.62
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.58",
    "evidence": {
      "category": "performance",
      "score": 0.58
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.65",
    "evidence": {
      "category": "performance",
      "score": 0.65
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "serious",
    "title": "Lighthouse Performance score: 0.49",
    "evidence": {
      "category": "performance",
      "score": 0.49
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.6",
    "evidence": {
      "category": "performance",
      "score": 0.6
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.58",
    "evidence": {
      "category": "performance",
      "score": 0.58
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.57",
    "evidence": {
      "category": "performance",
      "score": 0.57
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.59",
    "evidence": {
      "category": "performance",
      "score": 0.59
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.59",
    "evidence": {
      "category": "performance",
      "score": 0.59
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "serious",
    "title": "Lighthouse Performance score: 0.46",
    "evidence": {
      "category": "performance",
      "score": 0.46
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.65",
    "evidence": {
      "category": "performance",
      "score": 0.65
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.54",
    "evidence": {
      "category": "performance",
      "score": 0.54
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.53",
    "evidence": {
      "category": "performance",
      "score": 0.53
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "moderate",
    "title": "Lighthouse Performance score: 0.63",
    "evidence": {
      "category": "performance",
      "score": 0.63
    }
  }
]
serious wcag wcag/2.1.1 2 pages
Custom div-based buttons may not be keyboard operable
Keyboard-only users may be unable to activate the 'Smaller text', 'Larger text', and 'Toggle light or dark mode' controls because they are implemented as <div role="button"> elements rather than native <button> elements. Divs are not natively focusable or triggerable via Enter/Space unless tabindex and keydown handlers are explicitly added. Without inspecting the JS, this is a high-risk pattern that frequently fails 2.1.1 Keyboard. Fix: use native <button> elements, or ensure tabindex="0" plus keydown handlers for Enter/Space are implemented.
Affected pages (2)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "serious",
    "title": "Custom div-based buttons may not be keyboard operable",
    "evidence": {
      "selector": "div[role=button]",
      "note": "header controls"
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "serious",
    "title": "Text-resize controls not keyboard operable",
    "evidence": {
      "selector": "div[role=button][aria-label='Smaller text'], div[role=button][aria-label='Larger text']",
      "note": "Confirmed via triage that no keyboard handlers were detected"
    }
  }
]
serious wcag document-title 1 page
Documents must have <title> element to aid in navigation
Ensure each HTML document contains a non-empty <title> element https://dequeuniversity.com/rules/axe/4.10/document-title?application=axeAPI
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "serious",
    "title": "Documents must have <title> element to aid in navigation",
    "evidence": {
      "impact": "serious",
      "nodes": [
        {
          "selector": "html",
          "snippet": "<html>"
        }
      ],
      "node_count": 1,
      "tags": [
        "cat.text-alternatives",
        "wcag2a",
        "wcag242",
        "TTv5",
        "TT12.a",
        "EN-301-549",
        "EN-9.2.4.2",
        "ACT"
      ]
    }
  }
]
serious wcag html-has-lang 1 page
<html> element must have a lang attribute
Ensure every HTML document has a lang attribute https://dequeuniversity.com/rules/axe/4.10/html-has-lang?application=axeAPI
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "serious",
    "title": "<html> element must have a lang attribute",
    "evidence": {
      "impact": "serious",
      "nodes": [
        {
          "selector": "html",
          "snippet": "<html>"
        }
      ],
      "node_count": 1,
      "tags": [
        "cat.language",
        "wcag2a",
        "wcag311",
        "TTv5",
        "TT11.a",
        "EN-301-549",
        "EN-9.3.1.1",
        "ACT"
      ]
    }
  }
]
serious security missing-csp 1 page
Missing Content-Security-Policy header
No Content-Security-Policy header was present, leaving the page without a script-injection safety net.
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "serious",
    "title": "Missing Content-Security-Policy header",
    "evidence": {
      "header": "content-security-policy",
      "present": false
    }
  }
]
moderate security weak-csp 18 pages
Content-Security-Policy allows unsafe inline/eval
The CSP's script-src directive permits 'unsafe-inline' or 'unsafe-eval', which significantly weakens its XSS protection.
Affected pages (18)
  • / default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/what-the-multiverse-hypothesis-actually-predicts/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /topics/religion/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/secularism-and-the-court-witness-truth-without-god/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /topics/news/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/the-concept-of-supervenience-when-one-level-rests-on-another/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /quiz/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/the-afterlife-assumption-what-immortality-costs-moral-reason/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /topics/science/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /about/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /topics/philosophy/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /faq/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /search/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /topics/secularism/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/secularism-and-the-political-party-when-movements-organise/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
  • /posts/what-the-nervous-system-of-c-elegans-actually-taught-us/ default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "moderate",
    "title": "Content-Security-Policy allows unsafe inline/eval",
    "evidence": {
      "header": "content-security-policy",
      "value": "default-src 'self'; script-src 'self' 'unsafe-inline' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; font-src 'self'; img-src 'self' data: https://www.googletagmanager.com https://*.google-analytics.com; connect-src 'self' https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'",
      "weak_directives": [
        "script-src"
      ]
    }
  }
]
moderate security security/misconfiguration 17 pages
Weak or permissive Content-Security-Policy
The site's CSP appears weak (e.g., broad allowances such as 'unsafe-inline'/'unsafe-eval' or missing directives like script-src/object-src/base-uri), which reduces its effectiveness as a mitigation against XSS. On a content-heavy site with third-party embeds and no visible auth surface, the practical impact is moderate rather than critical, but a weak CSP fails to compensate for any future injection bugs (e.g., in comment/search features). Remediation: adopt a strict CSP with nonce- or hash-based script-src, restrict object-src 'none', default-src 'self', and explicit frame-ancestors to also cover clickjacking, avoiding 'unsafe-inline'/'unsafe-eval'.
Affected pages (17)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "selector": "header:Content-Security-Policy",
      "snippet": "CSP present but permissive",
      "note": "Exact header value not provided; assessed from triage flag description"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "moderate",
    "title": "Weak or overly permissive Content-Security-Policy",
    "evidence": {
      "note": "Actual CSP header value not provided in evidence; assessment based on triage flag reasoning."
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "moderate",
    "title": "Weak or missing Content-Security-Policy",
    "evidence": {
      "selector": "header/CSP",
      "note": "CSP header absent or overly permissive; no frame-ancestors/script-src restriction confirmed in provided headers"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "snippet": "N/A"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "note": "CSP flagged as weak by triage; specific directive values not provided in headers snapshot"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "note": "CSP header present but permissive per triage flag; exact directive values not provided in skeleton"
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "moderate",
    "title": "Weak or missing Content-Security-Policy",
    "evidence": {
      "note": "absent or weak Content-Security-Policy header value not shown as strict"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "moderate",
    "title": "Weak Content-Security-Policy permits inline script execution",
    "evidence": {
      "note": "CSP directive weakness flagged in triage; no frame-ancestors or nonce-based script-src confirmed to compensate"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "moderate",
    "title": "Weak or ineffective Content-Security-Policy",
    "evidence": {
      "note": "policy directives observed as overly permissive or incomplete based on triage flag; no strong script-src/object-src restrictions confirmed"
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "note": "specific header value not provided in evidence; assessed as weak based on triage flag"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "moderate",
    "title": "Weak or permissive Content-Security-Policy",
    "evidence": {
      "note": "CSP directive weakness inferred from triage flag; exact header value not provided in evidence"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "minor",
    "title": "Weak or overly permissive Content-Security-Policy",
    "evidence": {
      "note": "CSP header value not fully provided; flagged as weak per triage — recommend confirming directive-by-directive."
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "moderate",
    "title": "Weak or absent Content-Security-Policy",
    "evidence": {
      "note": "No strong CSP directives observed in response headers; page has a client-side search feature (/search/) increasing reflected-input surface"
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "moderate",
    "title": "Weak Content-Security-Policy allows injection/clickjacking exposure",
    "evidence": {
      "note": "reported as weak CSP by triage; header value not fully specified"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "minor",
    "title": "Weak or missing Content-Security-Policy",
    "evidence": {
      "selector": "response headers",
      "note": "CSP header absent or weak per triage flag"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "moderate",
    "title": "Weak or overly permissive Content-Security-Policy",
    "evidence": {
      "note": "Policy observed as weak/permissive per triage; exact header value not shown in provided evidence."
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "moderate",
    "title": "Weak or missing Content-Security-Policy",
    "evidence": {
      "selector": "response headers",
      "note": "No CSP header value was supplied in the evidence; treated as absent/weak based on triage flag."
    }
  }
]
moderate wcag wcag/1.1.1 10 pages
Article thumbnail images lack meaningful alt text
Article card images (e.g. what-the-nervous-system-of-c-elegans...png, secularism-and-the-court-witness...png) have empty alt="" while being wrapped in links to the articles. Since adjacent text (headline) already conveys the link purpose in most cards, the empty alt is acceptable per 1.1.1 as long as the image is purely decorative. However, in cases where the image is the ONLY content inside a link (e.g. the top featured article's image link with aria-label present, that one is fine), any card image-link that lacks an accessible name/adjacent text label leaves screen reader users with an unlabeled link announced only as the URL or nothing, violating 2.4.4 Link Purpose and 4.1.2 Name/Role/Value. Fix: keep alt="" only when the image is inside a link that also contains descriptive text; otherwise add descriptive alt text or aria-label identifying the article the image links to.
Affected pages (10)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "moderate",
    "title": "Article thumbnail images lack meaningful alt text",
    "evidence": {
      "selector": "section img[alt='']",
      "note": "Some image links (e.g. secularism-and-the-court-witness) appear to combine image+title text in a single <a>, which is acceptable; but if any purely image-only links exist without text/aria-label, they fail 2.4.4/4.1.2."
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "minor",
    "title": "Hero image alt text likely acceptable as decorative",
    "evidence": {
      "selector": "img[src='what-the-multiverse-hypothesis-actually-predicts.png']",
      "note": "escalate:false"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "minor",
    "title": "Decorative-style empty alt on article card thumbnails is acceptable but redundant link text should be checked",
    "evidence": {
      "selector": "main a img[alt='']",
      "note": "criterion 1.1.1"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "minor",
    "title": "Empty alt text on decorative-looking hero and article thumbnail images likely acceptable, but should be verified",
    "evidence": {
      "selector": "img[alt='']",
      "note": "Applies to secularism-and-the-court-witness... hero image and secularism-and-the-political-party... thumbnail"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "minor",
    "title": "Hero image alt text is empty but likely appropriate as decorative",
    "evidence": {
      "selector": "img[alt='']",
      "note": "the-concept-of-supervenience-when-one-level-rests-on-another.png and the-gambler-s-fallacy...png both have alt=''"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "minor",
    "title": "Decorative-looking hero image correctly given empty alt, but verify content relevance",
    "evidence": {
      "selector": "article img[alt='']",
      "note": "Same pattern repeated on related-post thumbnail image, also empty alt - consistent decorative treatment suggests intentional design choice."
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "minor",
    "title": "Decorative empty alt on post-card thumbnails is likely acceptable but should be verified for content-bearing images",
    "evidence": {
      "selector": "main a img[alt='']",
      "note": "18+ similar cards on page, all with empty alt"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "minor",
    "title": "Decorative bullet character not hidden from assistive tech",
    "evidence": {
      "selector": "main a",
      "note": "Link text begins with '● Title...' repeated pattern"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "minor",
    "title": "Decorative hero image alt text likely appropriate",
    "evidence": {
      "selector": "article img[alt='']",
      "note": "secularism-and-the-political-party-when-movements-organise.png"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "minor",
    "title": "Article hero image uses empty alt text",
    "evidence": {
      "selector": "article img[alt='']",
      "note": "Downgraded from 'serious' since empty alt on hero/thumbnail images is a common valid decorative pattern; severity depends on actual image content which cannot be confirmed from skeleton alone."
    }
  }
]
moderate wcag wcag/4.1.2 3 pages
Toggle-style quiz option buttons lack ARIA state for selection
The 'Random mix' and 'By topic' buttons appear to represent mutually exclusive choices (like a radio/tab selection) but are plain <button> elements without aria-pressed, aria-selected, or role='radio' to convey the chosen state to screen reader users. A screen reader user tabbing through cannot determine which mode is currently selected. Fix: add aria-pressed (if toggle buttons) or implement as a radiogroup/tablist with proper roles and aria-checked/aria-selected states that update as selection changes.
Affected pages (3)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "moderate",
    "title": "Toggle-style quiz option buttons lack ARIA state for selection",
    "evidence": {
      "selector": "button:contains('Random mix'), button:contains('By topic')",
      "note": "No aria-pressed or role attributes shown in skeleton, unlike header buttons which correctly use aria-pressed"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "moderate",
    "title": "Toggle mode button lacks accessible name and state text",
    "evidence": {
      "selector": "div[role=button][aria-label='Toggle light or dark mode']",
      "note": "criterion 4.1.2"
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "moderate",
    "title": "aria-pressed state may not update correctly on custom buttons",
    "evidence": {
      "selector": "div[role=button][aria-pressed='false']",
      "note": "State management should be verified via testing"
    }
  }
]
moderate wcag wcag/2.4.4 2 pages
Truncated article preview link text may reduce clarity
Screen reader users navigating by links or link lists will hear the full concatenated text (title plus truncated excerpt ending mid-sentence, e.g. 'it's worth asking what a p') since the entire preview block is wrapped in a single anchor. While the article title itself is present and likely sufficient to satisfy 2.4.4 at a minimum level, the abrupt truncation of the excerpt is confusing and adds noise, making the link's purpose harder to parse quickly. Fix: truncate excerpt text at a natural word/sentence boundary with an ellipsis, or move the excerpt outside the anchor (or mark it aria-hidden) so only the article title is announced as the link text, with the full excerpt available as visible supplementary text.
Affected pages (2)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "moderate",
    "title": "Truncated article preview link text may reduce clarity",
    "evidence": {
      "selector": "main a[href*='/posts/machine-authored-inquiry/']",
      "snippet": "'News What Machine-Authored Inquiry Can Be Now that AI can write clearly about hard questions, it's worth asking what a p'"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "minor",
    "title": "Redundant topic name repeated inside link text",
    "evidence": {
      "selector": "main a[href*='/posts/']",
      "note": "Link text: 'Secularism Secularism and the Court Witness...'"
    }
  }
]
moderate wcag wcag/2.4.7 2 pages
Quiz option buttons may lack visible focus indicator
Keyboard-only users need a clear visual indicator of which control has focus when tabbing through the 'Random mix', 'By topic', and 'Start random quiz' buttons. If these custom <button> elements rely on default browser outline that has been suppressed by CSS (common with custom-styled buttons), keyboard users cannot tell which option is selected before activating it. Fix: ensure a visible, high-contrast focus outline (min 3:1 contrast, 2px offset) is present on :focus-visible for all buttons, and verify it is not removed via outline:none without a replacement.
Affected pages (2)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "moderate",
    "title": "Quiz option buttons may lack visible focus indicator",
    "evidence": {
      "selector": "main section button[type='button']",
      "note": "Three sibling buttons with no visible state distinction described in skeleton"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "moderate",
    "title": "Missing visible focus indicator on custom buttons",
    "evidence": {
      "selector": "div[role=button]",
      "note": "text size and theme toggle buttons"
    }
  }
]
moderate wcag landmark-one-main 1 page
Document should have one main landmark
Ensure the document has a main landmark https://dequeuniversity.com/rules/axe/4.10/landmark-one-main?application=axeAPI
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "moderate",
    "title": "Document should have one main landmark",
    "evidence": {
      "impact": "moderate",
      "nodes": [
        {
          "selector": "html",
          "snippet": "<html>"
        }
      ],
      "node_count": 1,
      "tags": [
        "cat.semantics",
        "best-practice"
      ]
    }
  }
]
moderate wcag page-has-heading-one 1 page
Page should contain a level-one heading
Ensure that the page, or at least one of its frames contains a level-one heading https://dequeuniversity.com/rules/axe/4.10/page-has-heading-one?application=axeAPI
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "moderate",
    "title": "Page should contain a level-one heading",
    "evidence": {
      "impact": "moderate",
      "nodes": [
        {
          "selector": "html",
          "snippet": "<html>"
        }
      ],
      "node_count": 1,
      "tags": [
        "cat.semantics",
        "best-practice"
      ]
    }
  }
]
moderate wcag region 1 page
All page content should be contained by landmarks
Ensure all page content is contained by landmarks https://dequeuniversity.com/rules/axe/4.10/region?application=axeAPI
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "moderate",
    "title": "All page content should be contained by landmarks",
    "evidence": {
      "impact": "moderate",
      "nodes": [
        {
          "selector": "pre",
          "snippet": "<pre style=\"word-wrap: break-word; white-space: pre-wrap;\">"
        }
      ],
      "node_count": 1,
      "tags": [
        "cat.keyboard",
        "best-practice"
      ]
    }
  }
]
minor security server-version-disclosure 19 pages
Server header discloses version information
The server header ('nginx/1.24.0 (Ubuntu)') discloses software/version details useful for targeting known vulnerabilities.
Affected pages (19)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "minor",
    "title": "Server header discloses version information",
    "evidence": {
      "header": "server",
      "value": "nginx/1.24.0 (Ubuntu)"
    }
  }
]
minor wcag wcag/1.3.1 1 page
Redundant topic label prefixed inside link text
Each preview link begins with the topic name ('News') duplicating the page context already conveyed by the h1 and nav, which adds redundant verbosity to link announcements for screen reader users and could be better marked up as a separate, non-linked category label distinct from the link name.
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "minor",
    "title": "Redundant topic label prefixed inside link text",
    "evidence": {
      "selector": "main a"
    }
  }
]
minor wcag wcag/1.4.4 1 page
Toggle mode button lacks aria-pressed state
The 'Toggle light or dark mode' div-button has no aria-pressed or aria-checked attribute to communicate current mode state to assistive technology users, unlike the text-resize buttons. This is a minor Name/Role/Value gap (4.1.2) that should be reviewed alongside the resize controls fix for consistency.
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "minor",
    "title": "Toggle mode button lacks aria-pressed state",
    "evidence": {
      "selector": "div[role=button][aria-label='Toggle light or dark mode']"
    }
  }
]
minor wcag wcag/3.3.2 1 page
Search input relies on placeholder/aria-label only, no visible label
Low-vision users and users with cognitive disabilities benefit from a persistent visible label rather than a placeholder that disappears on input; the aria-label 'Search articles' does satisfy 4.1.2 Name, Role, Value and provides an accessible name for screen readers, so this is a minor usability concern rather than a hard barrier. Fix: add a visible <label> (can be visually styled minimally) associated with the input in addition to the aria-label to aid all users, especially those who zoom or have memory/cognitive impairments.
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "minor",
    "title": "Search input relies on placeholder/aria-label only, no visible label",
    "evidence": {
      "selector": "input[type=search]",
      "note": "placeholder='Search articles', aria-label='Search articles'"
    }
  }
]
info ux ux/lighthouse/accessibility 18 pages
Lighthouse Accessibility score: 1
Lighthouse category 'Accessibility' scored 1 (0-1 scale).
Affected pages (18)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "info",
    "title": "Lighthouse Accessibility score: 1",
    "evidence": {
      "category": "accessibility",
      "score": 1
    }
  }
]
info ux ux/lighthouse/best-practices 18 pages
Lighthouse Best Practices score: 1
Lighthouse category 'Best Practices' scored 1 (0-1 scale).
Affected pages (18)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-multiverse-hypothesis-actually-predicts/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/religion/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-court-witness-truth-without-god/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-argument-from-morality-does-ethics-need-a-divine-anchor/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/news/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-concept-of-supervenience-when-one-level-rests-on-another/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/quiz/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-afterlife-assumption-what-immortality-costs-moral-reason/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/science/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/about/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/the-gambler-s-fallacy-and-the-limits-of-intuitive-probabilit/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/philosophy/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/faq/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/search/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/topics/secularism/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/secularism-and-the-political-party-when-movements-organise/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  },
  {
    "url": "https://artificialatheist.com/posts/what-the-nervous-system-of-c-elegans-actually-taught-us/",
    "severity": "info",
    "title": "Lighthouse Best Practices score: 1",
    "evidence": {
      "category": "best-practices",
      "score": 1
    }
  }
]
info security missing-permissions-policy 1 page
Missing Permissions-Policy header
No Permissions-Policy header was present to restrict access to powerful browser features.
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "info",
    "title": "Missing Permissions-Policy header",
    "evidence": {
      "header": "permissions-policy",
      "present": false
    }
  }
]
info ux ux/lighthouse-unavailable 1 page
Lighthouse unavailable
could not parse lighthouse output (rc=1): Unterminated string starting at: line 806 column 21 (char 130799). stderr: Runtime error encountered: The page provided is not HTML (served as MIME type text/plain).
Affected pages (1)
Raw evidence (JSON)
[
  {
    "url": "https://artificialatheist.com/feed.xml",
    "severity": "info",
    "title": "Lighthouse unavailable",
    "evidence": {}
  }
]