JSDC × DevFrontier: Performance, SEO, and AEO Are Now the Same Chain
First edition of the DevFrontier meetup — the evolution of JSDC, Taiwan’s JavaScript community, repositioned for the AI era. The main talk: 邱柏鈞 Leo, Senior Frontend Engineer on KKday’s Growth Team, on 效能驅動成長 — growth driven by performance.
The business case
The Think With Google data that opens the talk: at 3 seconds of load time, bounce rate rises 32% compared to 1 second, and 53% of mobile users abandon. Optimizing Core Web Vitals has a conversion-improvement ceiling of +20%.
這不是耐心問題——這是商業損失。 It’s not a patience problem — it’s a business loss.
My translation to backend terms: it’s exactly like your /api/checkout having a P99 of 3 seconds. It’s not an abstract technical problem; it’s measurable cart abandonment showing up in revenue.
What is AEO?
Answer Engine Optimization: you used to optimize for Google’s algorithm; now you also need Google AI Overview, Gemini, ChatGPT, Claude, and Perplexity to “understand” you — because the result is no longer a click to your page, but the AI citing your content when it answers.
With KKday’s own data (84 analyzed AI Overview citations): 73% of cited sources are in the SEO top 10 — but ranking #1 guarantees nothing. Their counterexample: the keyword “大阪一日遊 行程規劃” ranked #1 in SEO but was never cited, because it was a product listing page. The cited pages were guide articles ranked #5. The AI’s criterion is brutally simple: does this page directly answer the user’s question? AI Overview doesn’t reward domain authority; it rewards direct usefulness.
The migration: from CSR + prerender.io to Nuxt SSR
KKday came from pure Vue CSR with a PHP BFF, paying for prerender.io so bots could see something. The new architecture: CloudFront (CDN caches the full HTML) → Nuxt (SSR + BFF) with two caching layers (local memory + Redis).
The pieces that resonated most with me, with their Spring Boot equivalent:
- Parallel BFF: moving from serial calls (~360ms) to
Promise.all(~130ms) has a direct impact on TTFB and LCP. It’sCompletableFuture.allOf()with@Async. - Data stratification: on the same product card, title and description go through SSR + CDN (static), but price and stock go client-side straight to the BFF with no cache — if the price were cached at the CDN, one user would see another user’s price. It’s selective
@Cacheable: you cache the product details, never the price. - Multi-level caching for flash sales: 100,000 concurrent requests → 99,000 are absorbed by the memory cache (~0.1ms), 999 by Redis (~2ms), and only 1 request reaches the microservice. The good old Caffeine (L1) + Redis (L2) pattern.
- The two-CDN bug: intermittently broken images and flashes of the desktop layout on mobile — same root cause: Cloudflare and CloudFront answering the same URL with different caching policies (
304vs200) on a site that serves different HTML per device. It’s@CacheablewithoutVary: User-Agent. The fix:Cache-Control: no-storetoward the browser.
AI bots are already the 2nd-largest bot traffic
Data from Cloudflare Radar and HUMAN Security: AI bots grew +187% year over year and are already the second-largest bot traffic category, right behind search. And 49.9% of that traffic isn’t for indexing — it’s for training models. KKday confirms it in their own Kibana logs: Applebot spiked (+124% in a month) as Apple Intelligence expands.
The strategic decision every site has to make: 給 AI 爬?還是不給? — do you let AI crawl you or not? The practical control is robots.txt + WAF rules (Cloudflare maintains the user-agent list for you), deciding separately: search=yes and ai-train=no.
The full chain
Leo ties it all together at the close:
- Performance wins you the ranking (SEO)
- The ranking gives you the chance to be cited by AI (AEO)
- Being cited keeps you visible in the zero-click era
These three things are now the same chain — and performance is the starting point. If you’re not cited, you don’t exist, even if you’re #1 on Google.