XooCode(){

CityHall

CityHall is a direct GovernmentBuilding subtype for the seat of a municipal government: the building where the mayor's office, city council chambers, and clerk's office live. It has no unique properties, but the typed classification is what puts a page into Google's civic knowledge panel alongside the city's Wikipedia / Wikidata entry.

Populate the inherited properties exhaustively:

  • address, geo, telephone, url.
  • openingHoursSpecification: business-hours for the clerk's office + council-meeting windows.
  • containedInPlace: the City that the CityHall serves (entity-link with @id).
  • parentOrganization: the GovernmentOrganization for the municipality.
  • event: upcoming council meetings as typed Event entries for calendar-surface visibility.

Full example of schema.org/CityHall json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/CityHall
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CityHall",
  "@id": "https://dunmore.gov.example/borough-hall",
  "name": "Dunmore Borough Hall",
  "url": "https://dunmore.gov.example/borough-hall",
  "description": "Seat of the Borough of Dunmore. Mayor's office, council chambers, borough clerk, treasurer.",
  "telephone": "+1-570-555-0001",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "400 South Blakely Street",
    "addressLocality": "Dunmore",
    "addressRegion": "PA",
    "postalCode": "18512",
    "addressCountry": "US"
  },
  "geo": { "@type": "GeoCoordinates", "latitude": 41.4237, "longitude": -75.6324 },
  "publicAccess": true,
  "isAccessibleForFree": true,
  "openingHoursSpecification": [
    { "@type": "OpeningHoursSpecification", "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], "opens": "08:30", "closes": "16:30" }
  ],
  "containedInPlace": { "@type": "City", "@id": "https://xoocode.com/reference/city/dunmore-pa", "name": "Dunmore" },
  "parentOrganization": { "@type": "GovernmentOrganization", "name": "Borough of Dunmore" },
  "event": [
    {
      "@type": "Event",
      "name": "Borough Council Regular Meeting",
      "startDate": "2026-04-21T19:00:00-04:00",
      "endDate": "2026-04-21T21:00:00-04:00",
      "eventAttendanceMode": "https://schema.org/MixedEventAttendanceMode",
      "location": [
        { "@type": "Place", "name": "Dunmore Borough Hall Council Chambers" },
        { "@type": "VirtualLocation", "url": "https://dunmore.gov.example/council/livestream" }
      ]
    }
  ]
}
</script>

Minimal valid version

The smallest markup that still produces a valid CityHall entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/CityHall (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "CityHall",
  "name": "Dunmore Borough Hall",
  "address": { "@type": "PostalAddress", "streetAddress": "400 South Blakely Street", "addressLocality": "Dunmore", "addressRegion": "PA" },
  "containedInPlace": { "@type": "City", "name": "Dunmore" }
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

  • Local business / civic structure knowledge panelprimary
    Google docs

Common CityHall mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    GovernmentBuilding on a city hall

    Wrong
    GovernmentBuilding on the mayoral seat
    Right
    CityHall — the specific subtype

    Specific-type classification drives civic knowledge-panel construction.

  2. 02

    Missing containedInPlace to the City

    Wrong
    CityHall with no City linkage
    Right
    containedInPlace: City with @id matching the city's canonical entity

    Entity-resolved containment collapses your CityHall into the city's broader knowledge panel.

  3. 03

    Council meetings in prose instead of Event

    Wrong
    Meeting calendar as HTML text
    Right
    Typed Event entries in the event array

    Structured Event entries surface in Google's calendar widgets and in AI-assistant 'when does council meet' queries.

Also mentioned in 1 other example

CityHall also appears in GovernmentBuilding. See the full CityHall schema page for every reference.

About the example data

Dunmore Borough Hall, the fictional seat of the Borough of Dunmore, hosting council meetings and the mayor's office.

Comments

Loading comments...

Leave a comment