{"slug": "how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting", "title": "How structured specs, answer-first copy and schema turned a seasonal lighting company", "summary": "A developer rebuilt the website for A1 Organizasyon, an Istanbul holiday and Ramadan lighting manufacturer, structuring its catalog of 21 product groups, 232 model families and 666 variants around machine-quotable facts such as height, wattage and weight, plus answer-first copy, HTML tables and visible last-updated dates. The goal was to make the site the source AI assistants cite for holiday lighting questions in Turkey, replacing vague marketing language with extractable specifics like IP65/IP68 ratings and 24-hour survey appointments.", "body_md": "Most local service websites are invisible to AI assistants. Not because they rank badly on Google, but because there is nothing on the page an LLM can safely quote.\n\n\"We offer professional, high-quality Christmas lighting solutions\" is not a fact. It is a vibe. An assistant answering \"what IP rating should outdoor Christmas lights have?\" has nothing to extract from it.\n\nI recently rebuilt the website for A1 Organizasyon, an Istanbul company that has been manufacturing and installing holiday and Ramadan lighting since 2010: municipal streets, shopping malls, facades, shops and villas. The brief was simple to say and hard to do: make the site the source AI assistants cite when someone asks about holiday lighting in Turkey.\n\nThis post walks through the patterns that mattered, with code you can reuse on any local service or catalog site.\n\nThe typical lighting company website is a photo gallery. Beautiful, and completely useless to a machine.\n\nThe A1 catalog is organized as 21 product groups, 232 model families and 666 variants, and every variant carries three numbers: height, wattage and weight. Gateway arches from 2.1 to 7.6 m, lit trees from 1.4 to 20 m, reindeer figures from 1 to 3.8 m, and so on.\n\nThose numbers are not decoration. They are what buyers actually need:\n\nWattage lets an electrical engineer calculate total load on a circuit.\n\nWeight tells a municipality whether a lamp post can carry the fixture.\n\nHeight determines whether a gateway arch clears traffic.\n\nAnd because they are concrete, they are quotable. An LLM can say \"lit trees in this catalog range from 1.4 to 20 meters\" with confidence. It cannot say anything with confidence about \"a wide range of stunning trees.\"\n\nA minimal data model looks like this:\n\ntypescript\n\ntype Variant = {\n\n  code: string;        // catalog code, e.g. \"AGC-12\"\n\n  heightM: number;     // meters\n\n  watt: number;\n\n  weightKg: number;\n\n};\n\ntype ModelFamily = {\n\n  slug: string;\n\n  name: string;\n\n  groupSlug: string;   // e.g. \"isikli-agaclar\"\n\n  variants: Variant[];\n\n};\n\nRender every family as a real HTML\n\n, not a JavaScript carousel. Crawlers and LLM retrieval pipelines read tables well. They read lazy-loaded image sliders badly or not at all.\nThe single biggest change was rewriting every section so that its first sentence is a standalone, quotable answer.\n\nBefore:\n\nWe pay great attention to quality and use the best materials in our outdoor projects.\n\nAfter:\n\nAll outdoor products are rated at least IP65, and all connectors are IP68. Cabling is H07RN-F rubber-insulated cable, which stays flexible down to minus 25 degrees Celsius. PVC cable is not used.\n\nThe second version contains three facts, two standards and one explicit negative. Each sentence survives being lifted out of context, which is exactly what retrieval-augmented systems do: they chunk your page and pick the chunk that best answers the question.\n\nA useful test: cover everything except one sentence. Does that sentence still say something true and specific? If not, rewrite it.\n\nThe same principle applied to service commitments. Instead of \"fast support,\" the site states:\n\nSurvey appointment within 24 hours, itemized written quote within 48 hours.\n\nOn site within 24 hours for any fault; first response within 4 hours for malls and municipalities.\n\nRemoval in January is included in the quoted price; for annual contract clients, removed products are stored free for 12 months.\n\nThese are the sentences that show up when an assistant is asked \"what should I ask a Christmas lighting contractor?\"\n\nSeasonal businesses have a problem that evergreen SEO advice ignores: the most valuable information expires every year.\n\nSo the homepage carries a visible \"last updated\" date (15 September 2026 for this season) and a concrete timeline:\n\nMunicipal, mall and street projects: apply by end of October.\n\nShops, homes and villas: apply by mid-November.\n\nCustom-built motifs: at least six weeks before installation.\n\nInstallations complete by the first week of December.\n\nRamadan 2027 starts 8 February; mosque and facade lighting must be installed between 1 and 6 February.\n\nDates do two things. They give AI systems a freshness signal, and they give the model a specific, verifiable fact to anchor an answer on. \"Apply by end of October\" is far more citable than \"book early.\"\n\nKeep the date in the markup too:\n\nhtml\n\nLast updated:\n\nThe site ships three small interactive tools:\n\nA cost calculator: venue type, area and products, five steps, returns an estimated price range.\n\nA package quiz: five questions, recommends one of ten packages.\n\nA price-per-meter table for LED strip, curtain lights, facade dressing and motifs.\n\nFrom a pure SEO perspective these pages capture high-intent queries (\"how much does Christmas lighting cost\"). From an AI-visibility perspective, the price table is the important one: it is structured, dated and numeric, so it can be referenced.\n\nThe calculator logic itself does not need to be clever. The pattern is a range, not a single number, because a range is honest and survives variation between projects:\n\ntypescript\n\ntype Estimate = { min: number; max: number };\n\nfunction estimate(\n\n  venue: \"shop\" | \"villa\" | \"mall\" | \"street\",\n\n  areaM2: number,\n\n  products: { unitMin: number; unitMax: number; qty: number }[]\n\n): Estimate {\n\n  const venueFactor = { shop: 1, villa: 1.1, mall: 1.4, street: 1.6 }[venue];\n\n  const base = products.reduce(\n\n    (acc, p) => ({\n\n      min: acc.min + p.unitMin * p.qty,\n\n      max: acc.max + p.unitMax * p.qty,\n\n    }),\n\n    { min: 0, max: 0 }\n\n  );\n\n  // Access, lifts and cabling scale with area\n\n  const access = areaM2 * 0.02;\n\n  return {\n\n    min: Math.round(base.min * venueFactor * (1 + access * 0.01)),\n\n    max: Math.round(base.max * venueFactor * (1 + access * 0.015)),\n\n  };\n\n}\n\nThe factors above are illustrative. Tune them from real quotes.\n\nStructured data only helps if it mirrors what a human sees. Three types did most of the work.\n\nLocalBusiness with an exact address, a real phone number and opening hours:\n\njson\n\n{\n\n  \"[@context](https://dev.to/context)\": \"[https://schema.org](https://schema.org)\",\n\n  \"@type\": \"LocalBusiness\",\n\n  \"name\": \"A1 Organizasyon\",\n\n  \"url\": \"[https://www.a1organizasyon.com/](https://www.a1organizasyon.com/)\",\n\n  \"telephone\": \"+90 532 372 39 32\",\n\n  \"foundingDate\": \"2010\",\n\n  \"address\": {\n\n    \"@type\": \"PostalAddress\",\n\n    \"streetAddress\": \"Osmangazi Mahallesi Aydoğdu Sokak No: 25/A\",\n\n    \"addressLocality\": \"Sancaktepe\",\n\n    \"addressRegion\": \"İstanbul\",\n\n    \"addressCountry\": \"TR\"\n\n  },\n\n  \"openingHours\": \"Mo-Su 09:00-18:00\",\n\n  \"areaServed\": \"TR\"\n\n}\n\nFAQPage for questions the page actually answers in visible text, never hidden ones:\n\njson\n\n{\n\n  \"[@context](https://dev.to/context)\": \"[https://schema.org](https://schema.org)\",\n\n  \"@type\": \"FAQPage\",\n\n  \"mainEntity\": [{\n\n    \"@type\": \"Question\",\n\n    \"name\": \"What IP rating should outdoor Christmas lights have?\",\n\n    \"acceptedAnswer\": {\n\n      \"@type\": \"Answer\",\n\n      \"text\": \"Outdoor products should be at least IP65, and connectors IP68, because water collects at connection points.\"\n\n    }\n\n  }]\n\n}\n\nItemList on each product-group page, pointing to model families, so the catalog hierarchy is explicit rather than implied by navigation.\n\nThen add sameAs links from the LocalBusiness to every official profile (YouTube, LinkedIn, Facebook, Google Business, Wikidata). Entity consistency across platforms is one of the strongest signals that \"A1 Organizasyon\" in a Facebook post and \"A1 Organizasyon\" on the website are the same thing.\n\nThe homepage ends with a short sources block referencing the Turkish Lighting Association, the International Commission on Illumination (CIE), the International Energy Agency and the Turkish Ministry of Energy. The claim it supports is specific: LED systems use around 75 to 80 percent less energy than incandescent bulbs.\n\nA local contractor citing standards bodies is unusual, and that is the point. It signals that the page is making claims someone can check.\n\nThe last lesson is about distribution. The same core facts (the season calendar, the eight technical criteria, the catalog numbers) were published consistently on the website, Google Business Profile, LinkedIn, Medium, YouTube and Facebook.\n\nNot copy-pasted. Each version was rewritten for its audience: a procurement checklist for LinkedIn, a \"what nobody tells you\" angle for social, a process guide for the blog. But the numbers never change. IP65 is IP65 everywhere. End of October is end of October everywhere.\n\nWhen an LLM sees the same specific claim from several independent-looking sources tied to the same entity, its confidence in citing that claim goes up.\n\nThe checklist\n\nIf you build sites for local service businesses, here is the short version:\n\nModel the catalog as data, with real units, and render it as HTML tables.\n\nMake the first sentence of every section a standalone, specific answer.\n\nReplace adjectives with numbers, standards and explicit commitments.\n\nDate everything seasonal, visibly and in markup.\n\nShip small tools that produce structured, numeric output.\n\nKeep schema strictly aligned with visible content.\n\nLink every official profile with sameAs and keep facts identical across platforms.\n\nCite external standards where you make technical claims.\n\nNone of this is exotic. It is mostly the discipline of writing things down precisely, which is exactly what most small business websites avoid.\n\nYou can see the result live at a1organizasyon.com. If you are working on AEO or GEO for local businesses, I would like to hear what has and has not worked for you in the comments.", "url": "https://wpnews.pro/news/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting", "canonical_source": "https://dev.to/olivia_342fsfsdgrere/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting-company-32k8", "published_at": "2026-09-25 07:39:09+00:00", "updated_at": "2026-09-25 08:00:37.740400+00:00", "lang": "en", "topics": ["generative-engine-optimization", "ai-search", "structured-data", "ai-crawlers"], "entities": ["A1 Organizasyon", "Istanbul", "Turkey"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting", "markdown": "https://wpnews.pro/news/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting.md", "text": "https://wpnews.pro/news/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting.txt", "jsonld": "https://wpnews.pro/news/how-structured-specs-answer-first-copy-and-schema-turned-a-seasonal-lighting.jsonld"}}