diff --git a/Meta/check-html-doctype.py b/Meta/check-html-doctype.py
new file mode 100755
index 00000000000..c2790000ab8
--- /dev/null
+++ b/Meta/check-html-doctype.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python3
+
+import os
+import re
+import subprocess
+import sys
+
+# FIXME: Include Layout tests in general.
+# They are currently deferred to a later PR to make review easier for now.
+RE_RELEVANT_FILE = re.compile('^Tests/LibWeb/(Ref|Screenshot|Text)/(.(?!wpt-import/))*\\.html$')
+RE_DOCTYPE = re.compile('^', re.IGNORECASE)
+
+
+def should_check_file(filename):
+ return RE_RELEVANT_FILE.match(filename) is not None
+
+
+def find_files_here_or_argv():
+ if len(sys.argv) > 1:
+ raw_list = sys.argv[1:]
+ else:
+ process = subprocess.run(["git", "ls-files"], check=True, capture_output=True)
+ raw_list = process.stdout.decode().strip('\n').split('\n')
+
+ return filter(should_check_file, raw_list)
+
+
+def run():
+ files_with_missing_doctypes = []
+
+ for filename in find_files_here_or_argv():
+ with open(filename, 'r') as file:
+ if not RE_DOCTYPE.search(file.readline()):
+ files_with_missing_doctypes.append(filename)
+
+ if files_with_missing_doctypes:
+ print('The following HTML files should include a doctype declaration at the start of the file but don\'t:\n' +
+ 'You should add to the very beginning of these files, except if they absolutely need ' +
+ 'to run in quirks mode. In that case, you can clearly indicate so with a bogus doctype that says ' +
+ '"quirks" instead of "html".\n',
+ ' '.join(files_with_missing_doctypes))
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ os.chdir(os.path.dirname(__file__) + "/..")
+ run()
diff --git a/Meta/lint-ci.sh b/Meta/lint-ci.sh
index e8e3e95adcc..19d89520049 100755
--- a/Meta/lint-ci.sh
+++ b/Meta/lint-ci.sh
@@ -15,6 +15,7 @@ set +e
for cmd in \
Meta/check-debug-flags.sh \
+ Meta/check-html-doctype.py \
Meta/check-idl-files.py \
Meta/check-newlines-at-eof.py \
Meta/check-png-sizes.sh \