HENRY MARKS

NYC TOURISM + CONVENTIONSSELECTED WORK

STRUCTURED DATA AND METADATA

The project

A developer specification for NYC Tourism’s structured data across 18 page templates, and a cleanup of crawl errors and metadata across 12,673 content entries.

What I did

I led a technical SEO audit of NYC Tourism’s website: I reviewed the markup on 18 page templates, wrote a structured-data specification with JSON-LD examples and a build order, analyzed site crawls and a full Contentful export, separated sitewide errors from page-specific ones, and identified metadata issues for the team to address.

Years
2025–2026
Channels
Structured data, JSON-LD · Crawl audits, metadata

My process

Search and AI discoverability

I worked on structured data, metadata and content clarity to help search engines and AI systems understand the site.

01 / Inspect

Review the templates

I examined live examples of 18 page types and recorded the existing markup. I checked whether it matched the visible content, included the necessary properties and used a suitable schema type.

02 / Analyze

Analyze with Claude Code

I used Claude Code to work through 18 page templates, a full Contentful export and four site crawls. I filtered repeated sitewide errors out of the findings so the team received actionable, page-specific fixes. I checked every recommendation against the live pages.

03 / Specify

Write the implementation detail

I documented what to keep, add or remove for each template, wrote example JSON-LD, and explained the reasoning so developers could work from a specification rather than a list of findings.

04 / Prioritize

Plan and revise the rollout

I set an implementation order. In March 2026 I revised the recommendations that depended on Google’s changed rules, and in July 2026 I revised the itinerary guidance after testing the live markup.

Schema architecture

What I examined

Articles, events, hotels, restaurants, attractions and guides each need different markup. I compared each template’s existing markup with its visible content and purpose.

For each template I recorded a live example page, the current markup, the types to add and remove, and a priority. On place pages I specified the best-fit type in place of the generic LocalBusiness: Park, PerformingArtsTheater, TouristAttraction, StadiumOrArena or a transit type.

The table is the March 2026 version of the October 2025 audit, with the itinerary row revised in July 2026.

View all 18 templates

18 templates, current and recommended

TemplatePriorityExample pageCurrent markupRecommendedRemove
Articles1/articles/2025-tony-award-winners/Article, ImageObject, Organization, WebPageBlogPostingArticle
Attraction Tours1/attractions-tours/bryant-park/PostalAddress, TouristAttractionAll: Organization and WebPage. Tours: TouristTrip
Events1/events/audubon-mural-project/Event, Place, PostalAddress, some ScheduleOrganization and WebPage; startDate and endDate directly on EventSchedule
Hotels1/hotels/1-hotel-central-park/Hotel, PostalAddressOrganization and WebPage
Maps & Guides1/maps-guides/green-nyc/NoneCollectionPage, Organization and WebPage
Places1/places/astoria-park/Varies: PostalAddress, TouristAttraction, Park, PerformingArtsTheater, LocalBusiness, Store and moreWebPage and Organization; the best-fit type instead of LocalBusiness, plus TouristAttraction where tourists go
Restaurants1/restaurants/akoya/PostalAddress, RestaurantOrganization and WebPage
Shopping1/shopping/abracadabra-superstore/PostalAddress, StoreWebPage and Organization; specific store types like ClothingStore, BookStore or Bakery
Sports1/sports/barclays-center/LocalBusiness, PostalAddressWebPage and Organization; StadiumOrArena, SportsActivityLocation or SportsTeamLocalBusiness
Things To Do1/things-to-do/attraction-passes/NoneCollectionPage, ItemList, WebPage and Organization
Itineraries2/itineraries/curated-by-nyc-harlem/Organization, WebPage, CollectionPage (verified July 14, 2026)BlogPosting, BreadcrumbList and ImageObject; keep Organization and WebPage (revised July 2026)CollectionPage as the primary type
Museums & Galleries2/museums-galleries/alice-austen-house-museum/ArtGallery or Museum, PostalAddressOrganization and WebPage; TouristAttraction alongside Museum
Neighborhoods2/new-york/the-bronx/woodlawn/NonePlace, CollectionPage, WebPage and Organization
Nightlife2/nightlife/aldo-sohm-wine-bar/NightClub, BarOrPub or EntertainmentBusiness, PostalAddressOrganization and WebPage; BarOrPub, NightClub, MusicVenue or ComedyClub
Photo Galleries2/photo-galleries/a-night-at-stonewall/NoneImageGallery, WebPage and Organization
Tours2/tours/nyc-central-park-bike-rental/NoneTouristTrip, TouristAttraction, PostalAddress, WebPage and Organization
Transportation2/transportation/laguardia-airport/LocalBusiness, PostalAddressWebPage and Organization; Airport or TrainStationLocalBusiness
Videos2/videos/all-in-nyc/NoneVideoObject, WebPage and Organization

I matched each recommended type to the search features it can unlock, from event results to Knowledge Panels and AI Overview citations, sorted them into three tiers, and ordered the build by which types depend on others. The six first-tier types define the site’s identity and core content.

The plan for developers followed one rule: each page gets one definition of what it is, and markup never describes anything visitors can’t see. Add the base layer, add each template’s main type, remove conflicting types, validate each template in the Rich Results Test, launch Priority 1, and watch Search Console before starting Priority 2.

  1. First

    Organization on every template. Event. BlogPosting on articles and itineraries. TouristDestination with Place on neighborhood and borough pages. TouristAttraction on attraction pages. ImageGallery with ImageObject on photo galleries.

  2. Next

    Hotel, Restaurant, VideoObject, venue types like Museum, Park and StadiumOrArena, and ItemList.

  3. Last

    BreadcrumbList and FAQPage.

I wrote a full JSON-LD example for every template except Attraction Tours. This one, abridged, is for Photo Galleries.

View the Photo Galleries example
Photo Galleries JSON-LD, abridged
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://www.nyctourism.com/#organization",
      "name": "New York City Tourism + Conventions",
      "url": "https://www.nyctourism.com",
      "logo": { "@type": "ImageObject", "url": "https://www.nyctourism.com/path-to-logo.png" }
    },
    {
      "@type": "WebPage",
      "@id": "https://www.nyctourism.com/photo-galleries/a-night-at-stonewall/#webpage",
      "url": "https://www.nyctourism.com/photo-galleries/a-night-at-stonewall/",
      "name": "A Night at Stonewall",
      "isPartOf": { "@id": "https://www.nyctourism.com/#website" }
    },
    {
      "@type": "ImageGallery",
      "@id": "https://www.nyctourism.com/photo-galleries/a-night-at-stonewall/#gallery",
      "name": "A Night at Stonewall Photo Gallery",
      "image": ["https://www.nyctourism.com/path-to-photo-1.jpg", "..."]
    }
  ]
}

FAQ schema, reframed

In August 2023 Google limited FAQ rich results to well-known government and health sites, so NYC Tourism’s pages won’t get the dropdowns. I kept FAQ markup in the specification for a different reason: visibility on AI platforms, content clarity and other search engines like Bing. I limited it to 2 to 5 real questions visible on the page, with no promotional content.

Metadata and technical triage

Project context

I worked from Contentful exports and site crawls taken between July and November 2025. The result was a metadata audit workbook and filtered crawl worklists that separated the issues the team needed to address.

The July 3, 2025 crawl reported 9,409 broken-link rows. I traced 8,089 of them to one sitewide link to brooklynhistory.org and filtered those out, which left a worklist of page-specific problems on 957 pages, led by links to nycgo.com, NYC Tourism’s own former domain.

I applied the same method to three more crawls. In September the sitewide cause became a link to Historic Richmond Town’s Decker Farm page.

A September 9, 2025 sitemap check turned up 13 URLs that didn’t belong: 5 broken pages and 8 redirects, six of them Bronx neighborhood pages still listed under an old address.

View the four crawls

Four crawls

CrawlBroken link rowsPages affectedSingle largest cause
July 3, 20259,4098,418brooklynhistory.org, 8,089 rows
July 21, 20258,7668,193brooklynhistory.org, 8,172 rows
September 22, 20256,5225,683historicrichmondtown.org/deckerfarm, 5,235 rows
September 30, 20259,0678,492historicrichmondtown.org/deckerfarm, 8,173 rows

I exported all 12,673 entries from Contentful (8,292 venues, 3,256 calendar events, 1,031 articles and 94 landing pages) and measured every title against 60 characters and every description against 160.

A third of the entries had no meta description, and three quarters of the titles were short, averaging 22 characters. Most entries flagged as duplicates were blank descriptions sharing the same empty value.

I audited the descriptions for missing copy, short or long text, and true duplicates, then organized the findings into a cleanup worklist. This was an audit and recommendation process, not a rewrite of every description.

View the audit results

Titles and descriptions by length

MeasureResultCountShare
DescriptionMissing4,11932.5%
DescriptionVery short1200.9%
DescriptionShort7946.3%
DescriptionIdeal6,31149.8%
DescriptionLong1,28910.2%
DescriptionVery long400.3%
TitleShort9,67476.3%
TitleIdeal2,75721.8%
TitleLong1601.3%
TitleVery long820.6%
Average lengthDescriptions85.5 characters
Average lengthTitles22.1 characters

Duplicate titles and descriptions

I combined the 12 duplicate title tags and 30 duplicate meta descriptions from a November 5, 2025 crawl into one workbook and traced each title pair to its cause: video pages with blank or “undefined” titles, travel trade directory filters, and old and new versions of the same article. Most duplicate descriptions were on restaurant pages.

In July 2025 I rewrote 18 article titles to put the search term first, such as “Chinatown Restaurants” and “NYC Pride 2025.”

View five of the rewrites

Before and after, 5 of 18

Original titleRewritten title
Multigenerational Family-Owned Restaurants in Chinatown | NYC TourismChinatown Restaurants: Multigenerational, Family-Owned Spots | NYC Tourism
What Women Should Know Before Traveling Solo to NYC | NYC TourismSolo Travel NYC: What Women Should Know Before Visiting | NYC Tourism
Summer 2025 Arts Guide | NYC TourismArts Guide NYC: Summer 2025 Shows, Events & Exhibits | NYC Tourism
A Guide to St. George, Staten Island | NYC TourismSt. George Staten Island: A Visitor’s Guide | NYC Tourism
Where to Celebrate Pride Month 2025 in New York City | NYC TourismNYC Pride 2025: Parades, Festivals & Queer Events | NYC Tourism