# Church website checklist, ordered by what is actually missing

Church: ______________________________
Checked by: ______________________________  Date: ____________
Site URL: ______________________________

Every item below is ordered by how many of 203 church websites were missing it
when they were crawled on 30 July 2026 UTC. Fix them in this order. The bottom
four are the ones every other church website article opens with, and they are
already done on almost every site in the sample.

The 203 sites are every church in the Church Posting register that carries a
website URL. The register was assembled and verified by editors on 28 July 2026,
not drawn at random from US congregations, and it skews confessional and
Reformed. Cite it as "203 church websites from the Church Posting register,
checked on 30 July 2026", never as "US church websites". The register is at
https://churchposting.com/churches/ and the aggregate table is at
https://churchposting.com/downloads/website-checklist-209-aggregate.csv

Six further sites were attempted and not analyzed: three returned HTTP 403,
two disallowed this crawler in robots.txt, and one served a certificate chain
that does not verify on a clean client. None of the six is folded into a
denominator anywhere.

---

## How to work through this

Open the church homepage in a desktop browser. Press Ctrl+U (Cmd+Option+U on a
Mac) to see the HTML the way a crawler sees it, and Ctrl+F inside that view to
search it. Everything below can be checked from that one view plus a phone. Budget
ninety minutes for the whole list and about four hours for the fixes if the site
is on WordPress, Squarespace or Wix.

Do not start at the top of the list if the site is missing something at the
bottom. A site with no service time on the homepage fixes that first, then comes
back up here.

---

## 1. A Church, ReligiousOrganization or Place type in the JSON-LD

Missing on 187 of 203. Church appeared 5 times. ReligiousOrganization appeared
zero times. 53 sites type themselves LocalBusiness and 45 emit Organization and
nothing more specific.

[ ] Ctrl+F the source for `application/ld+json`. If nothing comes back, the site
    publishes no structured data at all, which is where 86 of the 203 sit.
[ ] If a block exists, Ctrl+F it for `"@type"`. Write down every type you find.
[ ] Add a block naming the congregation, its postal address, its telephone and
    its service hours. Put it on the homepage. The block to paste is at the
    bottom of this file.
[ ] Check the block parses. Paste it into Google's Rich Results Test before you
    publish. Not one of the 117 blocks in the sample failed to parse, so a
    parse error would put a church below every peer in the sample.

Platform note, from the same crawl. All 47 Squarespace sites in the sample emit
JSON-LD and none of the 47 is typed as a church, a religious organization or a
place. Wix: 15 of 17 emit JSON-LD and none of the 17 is typed that way. WordPress
is the only platform in the sample where churches get this right, on 12 of 69
sites. If the site is on Squarespace or Wix, no setting does this. Paste the block
into the custom code field.

What this does not do: it does not make the church rank. It makes the facts
machine readable so a tool reading the site does not have to guess them out of
prose.

## 2. Service hours in the JSON-LD

Missing on 173 of 203. Only 30 publish hours a machine can read, and only one of
those uses the OpeningHoursSpecification object rather than the plain
openingHours string.

[ ] 168 sites in the sample print a service time for a person and publish nothing
    for a machine. Check whether this is one of them: the time is in the page
    text and there is no `openingHours` anywhere in the source.
[ ] Add `openingHoursSpecification` with `dayOfWeek`, `opens` and `closes` in
    hh:mm:ss or hh:mm form, one entry per service.
[ ] Make the hours match the text on the page. Structured data that describes
    something not visible on the page is against Google's own guidelines.
[ ] Set the hours again on the Google Business Profile, which is a separate
    system and does not read the website.

## 3. A phone number that can be tapped to dial

Missing on 156 of 203. 144 sites show a number somewhere in the text, so 97 of
the 144 make a phone user retype it. That is 144 minus 47.

[ ] Ctrl+F the source for `tel:`. If it is absent, this item fails.
[ ] Wrap every visible phone number in `<a href="tel:+15550100">`. Keep the
    visible digits formatted the way a human reads them.
[ ] Open the homepage on an actual phone and tap the number.
[ ] Put the number in the header or the footer, not only on a contact page.

## 4. Exactly one h1 element

Missing on 127 of 203. 60 sites carry no h1 at all, 67 carry more than one, and
one site emits eighteen.

[ ] Ctrl+F the source for `<h1`. Count the hits.
[ ] If the count is zero, the largest text on the page is styled to look like a
    heading and is not marked as one. Fix the markup, not the font size.
[ ] If the count is above one, the theme is using h1 on every slide or card.
    Demote those to h2.
[ ] Make the one h1 name the congregation and the town in words a stranger would
    use. Seven sites in the sample have an h1 holding only a logo image, which
    reads as an empty heading.

## 5. The town named in the title tag

Missing on 105 of 203. 98 name the town, 77 name the state. Titles run 4 to 122
characters, median 41.

[ ] Read the title element. If it says "Home" or only the church name, rewrite it.
[ ] Put the congregation name and the town in it. Google's own guidance asks for
    descriptive and concise text and names "Home" as the thing to avoid.
[ ] Keep every page's title distinct. 31 sites in the sample run over 60
    characters and 55 run under 30.

## 6. A copyright line with the right year

Missing on 104 of 203. Of the 99 sites carrying a line, 18 show a year before
2025 and the oldest reads 2018.

[ ] Find the footer line. If there is none, add one.
[ ] If the year is old, the fix is one line of template code that prints the
    current year, not an annual reminder in somebody's calendar.
[ ] A current year in a footer proves nothing about the content above it. Do the
    content review anyway: read the staff page and the events page and delete
    what is finished.

## 7. An email address on the homepage

Missing on 90 of 203. 113 show an address, 87 of those as a mailto: link.

[ ] Put one office address in the footer as a real mailto: link.
[ ] Keep the contact form if there is one. A form is not an email address and a
    visitor who wants to write from their own client cannot use it.
[ ] Decide who reads the inbox and write the name here: ______________________

## 8. A meta description

Missing on 72 of 203. A further 13 sites carry an og:description and no meta
description, and Google's snippet documentation names the meta description
element and does not name og:description.

[ ] Ctrl+F the source for `name="description"`.
[ ] Write one sentence naming the congregation, the town and when it gathers.
[ ] Keep it under about 160 characters. 33 sites in the sample run longer and
    one runs to 664.
[ ] Write a different one for every page. Identical descriptions across a site
    are named in Google's guidance as unhelpful.

## 9. A giving link

Missing on 43 of 203. 160 have one. 68 name a platform in the markup, led by
Planning Center Church Center at 38.

[ ] Find the link. If it is only inside a hamburger menu on mobile, move it.
[ ] Click it. This crawl never followed a giving link and never attempted a
    payment, so nothing in the sample proves any of the 160 links resolve.
[ ] Complete one real gift of one dollar on a phone and time it. Write the
    number of taps here: ______

## 10. A viewport that allows pinch zoom

Fails on 30 of 203, which carry user-scalable=no or a maximum-scale at or below 1.

[ ] Ctrl+F the source for `user-scalable` and `maximum-scale`.
[ ] Delete both. The correct tag is
    `<meta name="viewport" content="width=device-width, initial-scale=1">`.
[ ] Two sites in the sample carry no viewport tag at all. Add one if this is
    one of them.
[ ] This is the only accessibility item in this list. It is not an accessibility
    audit.

## 11. Over 1,000 characters of text in the HTML

Fails on 21 of 203. Four sites ship under 500 characters and the lowest is 98.

[ ] Ctrl+U and read what is there. If the page is close to empty, the content
    arrives by JavaScript.
[ ] Google renders JavaScript and says pages queue for rendering, which "may stay
    on this queue for a few seconds, but it can take longer than that". Nothing
    here says the page will not be indexed. It says the service time and the
    address are not in the first thing anybody reads.
[ ] Get the service time, the address and the phone number into the served HTML,
    even if the rest of the page stays as it is.

## 12. An address in the homepage text

Missing on 12 of 203. An address that exists only inside a map embed or an image
counts as missing here, because it is missing from the text.

[ ] Ctrl+F the page text for the street name.
[ ] Write the full street address, city, state and ZIP as text near the service
    times. Keep the map as well.

## 13. A service time on the homepage

Missing on 8 of 203. Within one click, missing on exactly one site in the sample.

[ ] Read the homepage without scrolling. If the time is not there, put it there.
[ ] Name the day and the time together. The measure used here looks for a clock
    time within 80 characters of a weekday name or a service word, which is what
    a stranger scans for too.
[ ] If there are several services, list all of them. If one is seasonal, say the
    dates.

## 14. Served over HTTPS

Fails on 4 of 203. 110 sites send an HSTS header.

[ ] Type the http:// address and see whether it redirects to https://.
[ ] Every current host issues a free certificate. If the site is on WordPress,
    Squarespace, Wix, Subsplash or Weebly, this is a setting and not a project.
[ ] 21 sites in the sample redirect to a different host than the one requested.
    That is usually fine. Check that the address on the printed bulletin is the
    one that answers.

---

## What this checklist does not cover, and was not tested

Nothing below was measured, so nothing below carries a number.

- **Page speed as a real user experiences it.** The crawl measured time to last
  byte of the HTML document on one connection from one machine. Median 160 ms,
  and exactly one site of 203 took over three seconds. That is not LCP, not INP,
  not CLS, and not a Lighthouse score. Speed is not a finding in this sample and
  no church should be told to fix it on this evidence.
- **Accessibility beyond the zoom tag.** Contrast, keyboard focus order, alt text
  coverage, form labels and screen reader behavior were not tested on any site.
- **Whether any giving link works.** No link was followed and no payment was
  attempted.
- **Whether any stated service time is accurate.** The crawl found the pattern.
  It did not attend a service.
- **Whether Google honors Church over LocalBusiness for a congregation.** Google's
  local business structured data documentation asks for the most specific
  LocalBusiness subtype and does not name Church or ReligiousOrganization. No
  site in the sample was submitted to a testing tool and no ranking effect was
  measured.
- **Design, photography, copy quality and whether anybody stayed.** None of it is
  in this file.

---

## The block to paste, for item 1 and item 2

Replace every value between the angle brackets and delete the brackets. Put it in
the `<head>` of the homepage, or in whatever field the platform calls custom
header code. One `openingHoursSpecification` entry per service. Times are 24
hour. Delete the `geo` block rather than guessing coordinates.

Every property here is one schema.org Church inherits from Place or
CivicStructure. Google's local business documentation asks for the most specific
LocalBusiness subtype and does not name Church or ReligiousOrganization, so if
the goal is specifically Google's local business features rather than an accurate
description of the congregation, `"@type": ["Church", "LocalBusiness"]` is the
version to test. Which typing Google honors for a congregation was not tested for
this file.

    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Church",
      "name": "<Full legal or public name of the congregation>",
      "url": "https://<your-domain>/",
      "telephone": "+1-<555>-<0100>",
      "email": "<office address>",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "<number and street>",
        "addressLocality": "<town>",
        "addressRegion": "<two letter state>",
        "postalCode": "<ZIP>",
        "addressCountry": "US"
      },
      "openingHoursSpecification": [
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": "Sunday",
          "opens": "09:30",
          "closes": "12:00"
        },
        {
          "@type": "OpeningHoursSpecification",
          "dayOfWeek": "Sunday",
          "opens": "18:00",
          "closes": "19:30"
        }
      ]
    }
    </script>

Before publishing, paste the block on its own into Google's Rich Results Test and
confirm it parses. Then confirm every fact in it also appears in words on the
homepage, because Google's structured data guidelines say plainly: "Don't mark up
content that is not visible to readers of the page."

---

Church Posting. https://churchposting.com/resources/growth/church-website-checklist/
Crawl date 30 July 2026 UTC. Register verified 28 July 2026.
