Snapshot (stack & wiring)
- Platform: Drupal 10 (core + Views + Views Slideshow + SecKit + Extlink).
- Design system: USWDS (banner, grid, nav), custom theme
ntia_uswds. - Search:
search.usa.gov(affiliate=ntia) with desktop & mobile forms. - Analytics:
- GA4 via
gtag.jswith two properties:G-H50FXLW992andG-55V70TEFYT; cross-domain linker forntia.gov,ntia.doc.gov,spectrum.gov. - DAP (Universal Federated Analytics) for DOC/NTIA.
- GTAG uses
page_placeholder:"PLACEHOLDER_page_location"(see “Fixes”).
- GA4 via
- Security helpers: SecKit (clickjacking CSS/JS), Cloudflare email obfuscation.
- Content widgets: Views Slideshow (cycle/fade), News & Publications view, featured initiatives grid, “Who we are” block, Redbook/Data Central/Spectrum Chart trio.
- Nav: USWDS extended header with mega-menus (About, Key Issues, Funding Programs, Newsroom, Data Central, Publications).
A11y & UX
Good
- USWDS banner (“Here’s how you know”), skip link, labeled search inputs, accordion buttons use
aria-expanded/aria-controls. - News items expose date/type text; images have
altattributes.
Fix/Improve
- Keyboard equivalence: Ensure the “Open search” round button and any custom buttons (and the hamburger) handle Enter/Space in addition to click.
- Alt text quality:
- Slideshow #1
altis a URL string—replace with descriptive text; #2–#4 look OK. - Decorative images inside icon tiles (e.g., logos used purely as links) can have empty
alt=""with accessible link text adjacent; otherwise keep meaningfulalt.
- Slideshow #1
- New-tab links: Many anchors use
target="_blank"(even for same-site). Addrel="noopener"to all to prevent reverse-tabnabbing (even on internal) or droptargetfor internal links. - Headings: There’s an
<h1>inside “Who we are”—that’s likely the only H1; keep it that way for the homepage.
SEO
- Add a meta description. None present—search snippets will be sub-optimal.
Example:The National Telecommunications and Information Administration (NTIA) advises the President on telecom and information policy, advancing universal high-speed Internet, efficient spectrum use, modern public safety communications, and an open, innovative Internet. - Open Graph / Twitter cards. Add
og:title/description/url/imageand Twitter equivalents for rich shares. - Canonical: Present (👍). Keep it stable.
Performance
- LCP image: The top slideshow image is
loading="lazy". For LCP, do not lazy-load the first visible hero image; considerfetchpriority="high"andpreloadif it’s static. - Font Awesome duplication: You load FA JS (v5), v6 shims, and FA CSS—that’s heavy. Prefer the CSS sprite (or self-host subset) and remove redundant scripts.
- Slideshow jank: Views Slideshow is configured with
fixed_height: 1and lazy images; you’ve set width/height attrs (good), but also ensure the wrapper reserves height to avoid layout shift. - Third-party order: GA and DAP are async (👍). Consider
preconnecttohttps://www.googletagmanager.com&https://www.google-analytics.comfor minor TTFB wins.
Analytics correctness
- GTAG placeholder bug:
You setpage_placeholder:"PLACEHOLDER_page_location"in bothgtag('config', ...)calls. Replace with:gtag('config', 'G-H50FXLW992', { groups: 'default', linker: { domains: ['ntia.gov','ntia.doc.gov','spectrum.gov'] }, page_location: location.href, page_title: document.title }); gtag('config', 'G-55V70TEFYT', { groups: 'default', linker: { domains: ['ntia.gov','ntia.doc.gov','spectrum.gov'] }, page_location: location.href, page_title: document.title }); - Double-property strategy: If both properties are intentional (e.g., roll-up + site-level), keep them, but ensure events aren’t double-sent from custom code.
- Consent mode (optional): If you adopt consent banners, wire GA4 consent to stay compliant with DOC/OMB guidance.
Security hardening (headers)
Set these at the edge (Apache/Nginx/CloudFront):
Strict-Transport-Security: max-age=31536000; includeSubDomains; preloadContent-Security-Policy(script/style/img/connect-src allowlists for Drupal, USWDS, GA, DAP; includeupgrade-insecure-requests)Referrer-Policy: no-referrerPermissions-Policy(turn off camera/mic/geolocation unless needed)X-Content-Type-Options: nosniff,X-Frame-Options: DENY(or CSP frame-ancestors) — SecKit helps, but headers are definitive.
Drupal-specific notes
- Extlink config: You’re excluding
.gov|.mil(extExclude: ".\.gov|.\.mil"). Confirm the regex behaves as intended across subdomains; stray dots can mis-match. - Views Slideshow:
pause_on_click:0andpause:1. Consider pausing on focus for a11y; ensure arrow/controls are keyboardable if present. - Cloudflare email decode: Works; ensure the plain text has an accessible label before the obfuscated span (you do include visible link text).
Content IA (what users see)
- Hero slideshow: Spectrum strategy, Innovation Fund Round 3, Data Central, 2023 Federal Broadband Funding Report.
- News & Publications: Fresh items (Aug 2025), “View all news” CTA.
- Featured initiatives: BroadbandUSA, ITS, C-SCRIP, 5G Challenge.
- Who we are: Plain-language mission blurb with H1.
- Quick resources: Redbook, Data Central, U.S. Spectrum Allocation Chart.
- Footer: Learn More, More Information, Locations, Social, contact mailboxes.
Quick wins checklist
- Fix GA4
page_placeholder→ realpage_location/page_title. - Add meta description + Open Graph/Twitter tags.
- Make first hero image not lazy, set
fetchpriority="high". - Add
rel="noopener"to everytarget="_blank"link (or avoid_blankinternally). - Replace the URL-style
alttext in slideshow #1 with a meaningful description. - Consolidate Font Awesome (drop redundant JS/shims if possible).
- Ensure custom buttons (search toggle, menu) honor Enter/Space activation.
- Ship security headers (HSTS, CSP, Referrer-Policy, etc.).
If you want, I can draft the exact <head> meta block (description + OG/Twitter) and a tiny GA4 snippet with the fixed config for you to paste.