diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # Changelog
 
+## [0.3.0.0] - 2026-03-08
+
+### Added
+
+* Check URLs in `<script>`, `<iframe>`, `<video>`, `<audio>`, `<source>`, `<embed>`, and `<object>` tags.
+* Check `<video poster>` attribute for broken URLs.
+* Check `<form action>` attribute for broken URLs.
+* Parse `srcset` attributes on `<img>` and `<source>` tags for broken URLs.
+
 ## [0.2.0.0] - 2026-03-08
 
 ### Added
diff --git a/linkcheck.cabal b/linkcheck.cabal
--- a/linkcheck.cabal
+++ b/linkcheck.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: c4572d1f18f5023bc2017ff15d83d0fd2c1330a48896a18725cb11725624109f
+-- hash: e53500fa97c543cf1a41fad189249bca445f70accd68c37c3228c7e2314b5441
 
 name:           linkcheck
-version:        0.2.0.0
+version:        0.3.0.0
 synopsis:       Check for broken links in CI
 homepage:       https://github.com/NorfairKing/linkcheck#readme
 bug-reports:    https://github.com/NorfairKing/linkcheck/issues
diff --git a/src/LinkCheck.hs b/src/LinkCheck.hs
--- a/src/LinkCheck.hs
+++ b/src/LinkCheck.hs
@@ -15,6 +15,7 @@
 import Control.Monad.Logger
 import Control.Retry
 import qualified Data.ByteString as SB
+import qualified Data.ByteString.Char8 as SB8
 import qualified Data.ByteString.Lazy as LB
 import Data.Cache.LRU (LRU, newLRU)
 import qualified Data.Cache.LRU as LRU
@@ -337,9 +338,12 @@
                             let removeFragment u = u {uriFragment = ""}
                             let uris =
                                   (if workerSetCheckFragments then id else map removeFragment) $
-                                    mapMaybe (parseURIRelativeTo queueURI) $
-                                      mapMaybe (fmap T.unpack . rightToMaybe . TE.decodeUtf8') $
-                                        mapMaybe aTagHref tags
+                                    concatMap
+                                      ( mapMaybe (parseURIRelativeTo queueURI)
+                                          . mapMaybe (fmap T.unpack . rightToMaybe . TE.decodeUtf8')
+                                          . tagURLs
+                                      )
+                                      tags
 
                             let urisToAddToQueue =
                                   map
@@ -397,13 +401,32 @@
   Left _ -> Nothing
   Right a -> Just a
 
-aTagHref :: (Eq str, IsString str) => Tag str -> Maybe str
-aTagHref = \case
-  TagOpen "a" as -> lookup "href" as
-  TagOpen "link" as -> lookup "href" as
-  TagOpen "img" as -> lookup "src" as
-  TagOpen "meta" as -> metaImageContent as
-  _ -> Nothing
+tagURLs :: Tag SB.ByteString -> [SB.ByteString]
+tagURLs = \case
+  TagOpen "a" as -> maybeToList $ lookup "href" as
+  TagOpen "link" as -> maybeToList $ lookup "href" as
+  TagOpen "img" as -> maybeToList (lookup "src" as) ++ parseSrcset (lookup "srcset" as)
+  TagOpen "script" as -> maybeToList $ lookup "src" as
+  TagOpen "iframe" as -> maybeToList $ lookup "src" as
+  TagOpen "video" as -> maybeToList $ lookup "src" as `mplus` lookup "poster" as
+  TagOpen "audio" as -> maybeToList $ lookup "src" as
+  TagOpen "source" as -> maybeToList (lookup "src" as) ++ parseSrcset (lookup "srcset" as)
+  TagOpen "embed" as -> maybeToList $ lookup "src" as
+  TagOpen "object" as -> maybeToList $ lookup "data" as
+  TagOpen "form" as -> maybeToList $ lookup "action" as
+  TagOpen "meta" as -> maybeToList $ metaImageContent as
+  _ -> []
+
+-- | Parse a srcset attribute value into individual URLs.
+-- The srcset format is: "url1 descriptor1, url2 descriptor2, ..."
+parseSrcset :: Maybe SB.ByteString -> [SB.ByteString]
+parseSrcset Nothing = []
+parseSrcset (Just s) =
+  mapMaybe extractURL $ SB8.split ',' s
+  where
+    extractURL entry = case SB8.words entry of
+      [] -> Nothing
+      (url : _) -> Just url
 
 -- | Extract the content attribute from meta tags that reference images.
 -- Covers og:image, twitter:image, and similar.
