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.
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.
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.
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.
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.
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.
Markup by template
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
| Template | Priority | Example page | Current markup | Recommended | Remove |
|---|---|---|---|---|---|
| Articles | 1 | /articles/2025-tony-award-winners/ | Article, ImageObject, Organization, WebPage | BlogPosting | Article |
| Attraction Tours | 1 | /attractions-tours/bryant-park/ | PostalAddress, TouristAttraction | All: Organization and WebPage. Tours: TouristTrip | |
| Events | 1 | /events/audubon-mural-project/ | Event, Place, PostalAddress, some Schedule | Organization and WebPage; startDate and endDate directly on Event | Schedule |
| Hotels | 1 | /hotels/1-hotel-central-park/ | Hotel, PostalAddress | Organization and WebPage | |
| Maps & Guides | 1 | /maps-guides/green-nyc/ | None | CollectionPage, Organization and WebPage | |
| Places | 1 | /places/astoria-park/ | Varies: PostalAddress, TouristAttraction, Park, PerformingArtsTheater, LocalBusiness, Store and more | WebPage and Organization; the best-fit type instead of LocalBusiness, plus TouristAttraction where tourists go | |
| Restaurants | 1 | /restaurants/akoya/ | PostalAddress, Restaurant | Organization and WebPage | |
| Shopping | 1 | /shopping/abracadabra-superstore/ | PostalAddress, Store | WebPage and Organization; specific store types like ClothingStore, BookStore or Bakery | |
| Sports | 1 | /sports/barclays-center/ | LocalBusiness, PostalAddress | WebPage and Organization; StadiumOrArena, SportsActivityLocation or SportsTeam | LocalBusiness |
| Things To Do | 1 | /things-to-do/attraction-passes/ | None | CollectionPage, ItemList, WebPage and Organization | |
| Itineraries | 2 | /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 & Galleries | 2 | /museums-galleries/alice-austen-house-museum/ | ArtGallery or Museum, PostalAddress | Organization and WebPage; TouristAttraction alongside Museum | |
| Neighborhoods | 2 | /new-york/the-bronx/woodlawn/ | None | Place, CollectionPage, WebPage and Organization | |
| Nightlife | 2 | /nightlife/aldo-sohm-wine-bar/ | NightClub, BarOrPub or EntertainmentBusiness, PostalAddress | Organization and WebPage; BarOrPub, NightClub, MusicVenue or ComedyClub | |
| Photo Galleries | 2 | /photo-galleries/a-night-at-stonewall/ | None | ImageGallery, WebPage and Organization | |
| Tours | 2 | /tours/nyc-central-park-bike-rental/ | None | TouristTrip, TouristAttraction, PostalAddress, WebPage and Organization | |
| Transportation | 2 | /transportation/laguardia-airport/ | LocalBusiness, PostalAddress | WebPage and Organization; Airport or TrainStation | LocalBusiness |
| Videos | 2 | /videos/all-in-nyc/ | None | VideoObject, WebPage and Organization |
Build order
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.
- 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.
- Next
Hotel, Restaurant, VideoObject, venue types like Museum, Park and StadiumOrArena, and ItemList.
- Last
BreadcrumbList and FAQPage.
Example JSON-LD
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
{
"@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.
Crawl triage
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
| Crawl | Broken link rows | Pages affected | Single largest cause |
|---|---|---|---|
| July 3, 2025 | 9,409 | 8,418 | brooklynhistory.org, 8,089 rows |
| July 21, 2025 | 8,766 | 8,193 | brooklynhistory.org, 8,172 rows |
| September 22, 2025 | 6,522 | 5,683 | historicrichmondtown.org/deckerfarm, 5,235 rows |
| September 30, 2025 | 9,067 | 8,492 | historicrichmondtown.org/deckerfarm, 8,173 rows |
Metadata audit, 12,673 entries
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
| Measure | Result | Count | Share |
|---|---|---|---|
| Description | Missing | 4,119 | 32.5% |
| Description | Very short | 120 | 0.9% |
| Description | Short | 794 | 6.3% |
| Description | Ideal | 6,311 | 49.8% |
| Description | Long | 1,289 | 10.2% |
| Description | Very long | 40 | 0.3% |
| Title | Short | 9,674 | 76.3% |
| Title | Ideal | 2,757 | 21.8% |
| Title | Long | 160 | 1.3% |
| Title | Very long | 82 | 0.6% |
| Average length | Descriptions | 85.5 characters | |
| Average length | Titles | 22.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.
Title rewrites
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 title | Rewritten title |
|---|---|
| Multigenerational Family-Owned Restaurants in Chinatown | NYC Tourism | Chinatown Restaurants: Multigenerational, Family-Owned Spots | NYC Tourism |
| What Women Should Know Before Traveling Solo to NYC | NYC Tourism | Solo Travel NYC: What Women Should Know Before Visiting | NYC Tourism |
| Summer 2025 Arts Guide | NYC Tourism | Arts Guide NYC: Summer 2025 Shows, Events & Exhibits | NYC Tourism |
| A Guide to St. George, Staten Island | NYC Tourism | St. George Staten Island: A Visitor’s Guide | NYC Tourism |
| Where to Celebrate Pride Month 2025 in New York City | NYC Tourism | NYC Pride 2025: Parades, Festivals & Queer Events | NYC Tourism |