Online Optimisers · Kiba / Zucity
Structural audit · DataForSEO crawl

What the 145-page crawl found

A live DataForSEO crawl was run against zucity.org with a 180-page cap and full JS rendering. 145 pages have now landed (about 80% of the target). The structural pattern is robust: the same template families, the same i18n split, and the same schema posture repeat across every captured page.

Near-complete crawl. 145 of 180 pages captured, 169 URLs still in the discovery queue, crawl status still in_progress in the background. The /items/ template family is now the dominant URL section (52 EN + 51 JA) and surfaces a duplicate-title cluster that was invisible in the earlier 34-page subset. All numbers below trace to the actual 145-page dataset.

Domain health

SSL
Valid
Let's Encrypt R13, expires 2026-08-06
HTTP/2
Enabled
Modern protocol, multiplexed
Sitemap
Present
DFS respecting it for crawl
robots.txt
Present
No start-page deny flag
Hosting
Vercel
Performance-optimized edge
Onpage score
96.13 / 100
DFS per-page avg across 145
Broken links
0
Zero 4xx/5xx across 145
HTTPS redirect
On
All pages forced to HTTPS

Foundation is solid. Vercel is a good call for a content-heavy multi-language Next.js site. SSL, HTTP/2, sitemap, and robots.txt all check out. Zero broken links or server errors across 145 pages. The structural concerns sit higher up the stack: schema, duplication, title patterns, and a /items/ template family that now dominates the URL footprint. Those are below.

Crawled pages inventory

A representative slice of the 145 pages captured, sampled across language buckets, template families, and status codes. The full crawl breaks down as: 52 /en/items/ listings + 51 /ja/items/ listings + 13 /en/ region landings + 13 /ja/ region landings + 7 /en/about/ + 7 /ja/about/ + 2 root redirects.

URL Status Title (truncated) H1? Words
/en/about/komoro200About Komoro | Zuzalu City Japan1,210
/en/about/komoro/snow-sports200Ski & Snow Sports in Komoro: Live the Japan Powder Winter1,741
/en/about/zucity200About ZuCity | Zuzalu City Japan866
/en/about/zucity/app200About Zuzalu City App | Zuzalu City Japan773
/en/about/zucity/events/annual-popup-2026200ZuCity Popup 2026 - Annual Popup City in Komoro, Nagano1,962
/en/about/zucity/events/builder-residency-2026200ZuCity Build Month 2026 - Build A New Neighborhood913
/en/about/zucity/properties200Buying Akiyas in Nagano | Zuzalu City Japan1,071
/en/all200Zuzalu City Japan - A Coliving Neighborhood for nomads...573
/en/4seas2004Seas | Zuzalu City Japan553
/en/ADDress200ADDress | Zuzalu City Japan548
/en/MIDORI200MIDORI.SO | Zuzalu City Japan548
/en/elelfa200Elelfa | Zuzalu City Japan549
/en/komoro200Komoro | Zuzalu City Japan589
/en/nagano200Nagano | Zuzalu City Japan560
/en/tokyo200Tokyo | Zuzalu City Japan558
/en/zucity200Zuzalu City Japan | Zuzalu City Japan567
/en/items/1200ZuCity Japan Daily Access | Zuzalu City Japan Event969
/en/items/8200ZuCity Artist & Builder Residency | Zuzalu City Japan Room454
/en/items/12200Osaka Art Residency | Zuzalu City Japan Room640
/en/items/16200Room #1 In Traditional Family Estate | Zuzalu City Japan Room448
/en/items/17200ZuCity Japan Deluxe Sticker Pack | Zuzalu City Japan Listing444
/en/items/518183939200Traditional Japanese House - Aramachi | Zuzalu City Japan Villa499
/en/items/1218183939200Finnish Log Cabin | Zuzalu City Japan Villa414
/en/items/1518183939200ADDress 軽井沢A邸 - 和室1 | Zuzalu City Japan Room408
/en/items/8888200ZuCity d/acc Week | Zuzalu City Japan Listing~450
/ja/about/komoro200小諸について | Zuzalu City Japan552
/ja/about/zucity200ZuCityについて | Zuzalu City Japan460
/ja/items/118183939200まきはうす | Zuzalu City Japan Room416
/ja/items/818183939200禅庭園リトリート(温泉エリア近郊) | Zuzalu City Japan Suite408
/ja/items/38888200ZuCity Recovery Week (2 person) | Zuzalu City Japan Listing426
/ja/zucity200Zuzalu City Japan | Zuzalu City Japan541
/en307(redirect)×0
/ja307(redirect)×0

32 of 145 crawled pages shown, sampled across English + Japanese, /items/ listings (rooms, villas, events, listings), regional landings, About sections, event pages, and the 2 root redirects.

Structural findings

1. Schema markup is absent across every page in the crawl
has_micromarkup: 0 / 145 pages · has_micromarkup_errors: 0 / 145

No JSON-LD, microdata, or RDFa detected by the crawler on any page. The pattern is now confirmed at scale: zero schema across rooms, villas, events, listings, regional landings, and about sections. This is the single biggest AI-visibility gap. ChatGPT, Perplexity, and Google AI Overviews lean heavily on schema to disambiguate entities, events, accommodations, and offers. Adding Event, Organization, LodgingBusiness, and Product schema is the highest-leverage structural change available.

2. Duplicate-content flag fires on 84 of 145 pages
duplicate_content: 84 / 145 (58%) · spans /items/ listings, region landings, and about pages across both languages

The duplicate-content footprint is wider than the earlier 34-page sample suggested. It is not just the regional landings; the entire /items/ family (52 EN + 51 JA) is flagged because en and ja versions share imagery, structure, and large amounts of identical text. No hreflang detected on any page. Adding reciprocal hreflang link tags across every en/ja pair is the single config change that tells search engines these are intentional language variants, not duplicates.

3. 64 pages share a duplicate title with another page (32 en/ja pairs)
duplicate_title: 64 / 145 (44%) · e.g. /en/items/8 and /ja/items/8 both titled "ZuCity Artist & Builder Residency | Zuzalu City Japan Room"

This is a much larger pattern than the earlier 2-page flag (/en/zucity vs /ja/zucity). The /items/ template renders the same title in both locales because the product name itself stays in English (or already in Japanese). Fix is dual: localize the section suffix (e.g. " | Zuzalu City Japan Room" -> " | Zuzalu City Japan・ルーム" on the ja side) and ship hreflang. Both fixes apply through the same Next.js layout helper, so the change is template-level not per-page.

4. 24 pages have titles under 30 characters (DFS title_too_short threshold)
title_too_short: 24 / 145 · e.g. "Komoro | Zuzalu City Japan" (26ch), "4Seas | Zuzalu City Japan" (25ch), "Tokyo | Zuzalu City Japan" (25ch)

The 13 regional/partner landings in each language (Komoro, Nagano, Hokkaido, Ryukyu, Tokyo, Kyuushuu, Chiangmai, 4Seas, ADDress, MIDORI, Elelfa, etc.) all carry minimal titles. Each loses the chance to surface a specific hook (coliving, akiyas, ski access, partner role, location). Pattern fix: "Komoro - Akiya Coliving in Nagano | Zuzalu City Japan" (52ch) instead of "Komoro | Zuzalu City Japan" (26ch). One template helper covers it.

5. Open Graph image is missing on 16 pages
og:image present: 129 / 145 (89%) · missing: 16 pages, concentrated in regional landings and some /items/ entries

Coverage is much stronger than the earlier 53% subset reading suggested. The /items/ family largely has og:image set (likely pulling the listing photo). The 16 gaps cluster on regional and partner landings where the hero is a section component rather than a single image. Closing them is low-effort: pull the hero or the first content image, fall back to a branded default. Matters most because those regional pages are exactly what gets shared on Twitter, Telegram, and Lu.ma when promoting a region.

6. Several /items/ pages carry 20-49 MB DOMs alongside the Popup 2026 pages
Heaviest: annual-popup-2026 en+ja both at 48.7 MB · /items/1 (Daily Access) at 33 MB · /items/8888 + /items/18888 + /items/58888 all at 21-24 MB · median DOM 9.0 MB

DOM weight is now a class issue, not a single-page issue. The Popup 2026 pages still top the chart at 48.7 MB, but the ZuCity Daily Access listing (/items/1) sits at 33 MB and several themed-week event listings (d/acc Week, DeSci Week, Weekend Getaway) sit at 20-24 MB. The median page across 145 is 9 MB, so the heaviest pages are 3-5x the typical weight. Worth profiling these for image weight (likely the culprit on listings), embedded video, or unbounded gallery rendering. Vercel edge caching mitigates load time, but mobile-Japan visitors on patchy connections will still feel hydration cost.

7. The two 307 redirects on /en and /ja are bare-root locale routes
/en -> 307 (redirects to /en/all or similar) · /ja -> 307 (same pattern) · only 2 redirects in the entire 145-page crawl, no other redirect chains found

A 307 here is technically fine (Next.js i18n default). 308 (permanent) would signal intent more clearly to crawlers and consolidate any inbound link equity. The good news from the larger crawl: no other redirect chains surface. The Japanese pages do not trigger extra 307s. Low priority, worth a one-line config change in next.config.js.

8. Click depth now spans 0-2 with the larger crawl, as expected
click_depth distribution: 38 at depth 0, 54 at depth 1, 51 at depth 2, 2 null (the 307s)

The picture changed from the 34-page sample where everything sat at depth 0. With 145 pages in, most of the new captures are /items/ listings at depth 1-2 (reached via region or category pages, not directly from the start URL or sitemap). The distribution is healthy: no orphan pages, no pages buried beyond depth 2, no surprises in the discovery graph. The sitemap is doing its job; the internal linking is doing its job. This is the cleanest finding in the crawl.

Schema gap map

Zucity sits at the intersection of events, accommodation, community, and content. Schema disambiguates all four for AI systems and SERP rich results. Current state across all 145 captured pages is uniform: zero schema present anywhere. The /items/ family (rooms, villas, venues, listings) makes the gap especially costly because each listing is a structured Product/LodgingBusiness entity that is currently invisible to AI.

Schema type Current state Where it belongs
× Missing Eventdate, location, organizer, offers annual-popup-2026, builder-residency-2026, and every themed-week page. Highest impact for AI citation when someone asks "what tech-builder coliving events are happening in Japan in 2026".
× Missing Organizationname, logo, sameAs, founder Homepage and /about/zucity. Should declare ZuCity as Organization with sameAs links to X, Discord, Lu.ma, GitHub, and link Kiba as founder.
× Missing LodgingBusiness + Placeaddress, geo, amenityFeature /about/zucity/properties plus every /items/ entry that represents a room, villa, suite, or venue (the crawl shows 30+ such listings across en/ja). Critical for AI travel queries ("coliving rural Japan" type questions). One Next.js template change covers the whole /items/ family.
× Missing Product / Offername, priceSpecification, availability Every /items/ entry that is a ticket, pass, or merch item (Daily Access, Full Pass, themed-week passes, sticker packs, long sleeves). The crawl confirms 20+ such SKUs across en/ja. Lets AI surface pricing in answers about "coliving prices Japan" and ticket queries for events like ZuCity Popup 2026.
× Missing Personname, jobTitle, sameAs Kiba on /about/zucity, plus speakers, mentors, and themed-week hosts on the relevant event pages. Compounds the Organization schema.
~ Partial Open Graph + Twitter Cardog:title, og:description, og:image, twitter:card og:title and og:description present on virtually every page (143 of 145). og:image present on 129 of 145 (89%). Not strict schema but in the same AI-citation orbit. Closing the 16-page og:image gap is a quick win, mostly on regional/partner landings.
× Missing hreflang link tagslink rel=alternate hreflang=en/ja Every page that has an en/ja counterpart needs reciprocal hreflang. With 84 duplicate-content flags and 64 duplicate-title flags across the 145-page crawl, this is now the highest-volume single fix on the list. Template-level change.
× Missing BreadcrumbListitemListElement chain Region pages (Komoro, Nagano, Hokkaido) and sub-pages (snow-sports). Helps SERP show the path and helps AI map content hierarchy.

12-item fix sprint

Priority-ordered. Effort tags are realistic for a single dev + designer working on a Next.js app on Vercel. Sequence assumes Zucity has no current schema discipline (which the data confirms).

  1. Add Event schema to annual-popup-2026, builder-residency-2026, and every themed-week page. Single reusable component, populated from existing event data. half-day
  2. Add Organization schema to homepage and /about/zucity with sameAs links to X, Discord, Lu.ma, GitHub. Declares Kiba as founder. One-time addition. 1 hr
  3. Add hreflang tags reciprocally on every en/ja page pair. Resolves the 84-page duplicate-content flag and most of the 64-page duplicate-title flag in one template change. Single i18n helper edit in the Next.js layout. 1 hr
  4. Add og:image to the 16 pages currently missing it. Mostly regional and partner landings (Komoro, Tokyo, 4Seas, ADDress, MIDORI, Elelfa, etc.). Use the section hero where available, fall back to a branded default. half-day
  5. Lengthen the 24 short titles. Pattern: "Region/Partner - Specific Hook | Zuzalu City Japan". Worked example for Komoro: "Komoro - Akiya Coliving in Nagano, 1hr from Tokyo". Applies to all 13 region/partner landings in both languages. half-day
  6. Localize the /items/ title suffix on the ja side. Currently 32 en/ja /items/ pairs share identical titles because the product name stays English while the section suffix " | Zuzalu City Japan Room" never localizes. One layout helper change covers all of them. 1 hr
  7. Add LodgingBusiness + Place schema to /about/zucity/properties and to the 30+ /items/ entries that represent rooms, villas, suites, and venues. Geo coordinates, amenities, address structured for AI travel queries. Template-level change covers the whole /items/ family at once. half-day
  8. Add Person schema for Kiba on /about/zucity, plus a reusable Person component for speakers and themed-week hosts. Wires founder identity into the entity graph. half-day
  9. Add Product + Offer schema to the 20+ /items/ entries that are tickets, passes, or merch (Daily Access, Full Pass, themed-week passes, sticker packs). Surfaces pricing in AI answers about coliving costs and event tickets. 1 hr
  10. Profile and trim the heaviest DOMs. Popup 2026 pages at 48.7 MB, /items/1 (Daily Access) at 33 MB, four themed-week /items/ pages at 21-24 MB. Median page is 9 MB, so heaviest are 3-5x typical. Likely culprits: unoptimized listing galleries, embedded video, unbounded schedule rendering. Target: under 10 MB for /items/ pages, under 15 MB for the Popup landing. day
  11. Add BreadcrumbList schema to region + sub-region pages. Helps both SERP and AI map the hierarchy (Japan -> Nagano -> Komoro -> snow-sports). 1 hr
  12. Flip the /en and /ja 307s to 308s. One-line change in next.config.js i18n routing. Signals permanence to crawlers, consolidates inbound link equity. 1 hr

Honest caveat

This is a v1 manual scan plus a near-complete DataForSEO crawl (145 of a 180-page target, crawl still completing in the background). The structural pattern is now established and well-evidenced: every finding above traces to the actual 145-page dataset, and the remaining 35 pages would have to break the template pattern in a structurally novel way to shift the picture. That is unlikely, given how uniform the captured /items/, /about/, and region templates already are.

A full DataForSEO sweep plus a Firecrawl deep-run is available as a scoping option if you want exhaustive structural coverage. Honest read: skip it. The 12-item sprint above captures the lift the data supports. The remaining work will be obvious once the schema layer is in place and the next crawl has something fresh to measure.

Solid foundation, gaps are addressable. None of these are urgent. The combined effort of the 12-item sprint is roughly 1 designer plus 1 dev for 3 to 4 days. Sequence with the CRO page for maximum compound: schema fixes the discoverability layer, CRO fixes the conversion layer, and they reinforce each other.

Cross-links: audit hub for the top-level read · CRO teardowns for the conversion layer · orb home to pick another thread.

Donal · Online Optimisers · 2026-05-28 · Crawl data: DataForSEO on_page API, task id 05281338-1539-0216-0000-7dff772eba0c