---
title: "Website Development and CMS"
canonical: https://wavect.io/services/website-development/
language: en
description: "Create or rebuild a business website with an editing workflow that fits your team. Explore CMS choices, content migration, multilingual delivery and handover."
image: "https://wavect.io/img/general/bak/open_graph_preview.jpg"
---

Website Development and CMS

# A business website your team can keep up to date.

Plan the pages, content and publishing workflow together, then build a website around what visitors need to do and what your editors need to change.

EXAMPLE PUBLISHING FLOW

## An editor can publish without breaking the page.

1. **Model the content** Separate reusable service facts from layout and presentation.
2. **Preview the change** Check the page and its language variants before publication.
3. **Release and recover** Publish through an agreed approval path with version history.

DIRECT ANSWER

Website development combines page structure, design, implementation and a practical way to maintain content. A headless CMS separates editing from presentation; choose it when the publishing needs justify the extra frontend and operating work.

Best for

- A new public website, redesign or migration
- A team needing clear content and publishing responsibility

Consider another approach

- Your current CMS only needs a small content or template improvement
- A complex authenticated product, better scoped as a web application

// 01

## Start with visitors and editors

Inventory important pages, current URLs, content, forms, languages and integrations. Agree the page types and responsive journeys, then decide who supplies copy, translations, assets and approvals. These tasks are scoped explicitly. Application behavior belongs with [Web Apps](/services/web-apps/); customer self-service has a [portal owner](/services/customer-portals/). Existing websites and older systems can be assessed rather than rejected because of their age. For inherited systems, use [Software Takeover](/services/software-takeover/). Connections to operational systems are scoped through [API integration](/services/api-integration/).

// 02

## Specify the website your visitors and editors will actually use

A website brief needs more than a page count. Define repeatable page types and the tasks behind them so design, implementation and content entry can be estimated separately. That also makes a later CMS change less dependent on undocumented templates.

A page and content inventory

Identify entry pages, service details, proof, forms and policy content. Map current URLs to retained, replaced or retired destinations, with a named owner for each content decision.

Responsive page templates

Review real headings, long content, forms, error messages and translated copy at small and large sizes. Agree accessibility and browser checks as part of acceptance.

An editor workflow

Test creating a draft, previewing it, updating search fields, adding a language version and withdrawing a page. Include the approval and recovery steps your team will use after handover.

A launch and handover record

Check redirects, forms, indexing controls and essential journeys. Document repository, domain, CMS and hosting access, content export and the person responsible for updates.

// 03

## Use a CMS that fits the publishing work

A conventional CMS may be enough for page editing. Content as code can suit stable information with technical maintainers. Headless content management can support a tailored frontend or reuse across channels, and can coexist with static generation. Preview, approvals, roles and version history depend on the selected product and setup. Compare the options in the [CMS decision guide](/software-development-guide/headless-cms-vs-traditional-cms/) before buying complexity.

// 04

## Illustrative content model and publishing flow

A service record might contain a title, summary, body, public proof link and localized search fields. An editor prepares a draft, checks a preview and publishes through the agreed approval path. Confirm how permissions, revisions and withdrawal work in the chosen system. This is a synthetic model, not evidence that a named client uses a headless CMS.

| Content field or action | Editor responsibility | Publication check |
| --- | --- | --- |
| Service title and summary | State the actual offer in the visitor language. | A readable heading and matching page metadata. |
| Public proof reference | Select a relevant approved case. | A valid public link and accurate scope context. |
| Localized version | Review the translated offer and CTA. | Correct language switch and a local contact path. |
| Withdraw or replace a page | Choose its replacement and approval owner. | A useful redirect or appropriate removal with no stale public draft. |

// 05

## Review publishing and migration before the launch date

A polished homepage can hide problems in long service pages, empty search results or the publishing interface. Use representative content and real editor tasks early enough to change the setup.

1. **Agree the content and route map** - Choose the priority visitor tasks and page templates. Separate supplied content from copywriting, translation and migration work so nobody discovers an unowned content backlog at launch.
2. **Build and review a representative page** - Use a real long heading, images, a form and a second language. Have the editor create and preview the page through the proposed workflow before expanding all templates.
3. **Rehearse the release** - Test old entry URLs, redirects, form delivery, language navigation and indexing. Decide who approves launch, monitors failures and can restore the previous release.

// 06

## AI-assisted work with review responsibility

Our AI-assisted workflow combines draft implementation with human review and automated release checks. Suggested output still needs acceptance. Agree permitted tools and material first. Architecture, factual copy, accessibility, security and functional checks remain human responsibilities. AI-assisted production does not automatically add an AI feature to your website, or establish a faster, cheaper or higher-ranking result.

// 07

## Plan migration, launch and ownership together

Map old content and media to the new structure. Review retained URLs, redirects, language equivalents, metadata, canonical links, indexability and sitemap output. Keep drafts out of public search and verify forms and key journeys before launch. Agree account and source access, editor handover and the maintenance owner. Cost drivers include page variety, content readiness, migration volume, languages and integrations; CMS licences, hosting and ongoing work are separate. [MyMerch](/case-studies/mymerch/) supports storefront engineering experience, not a headless-CMS migration claim.

// proof

## Website engineering with operational context

MyMerch combines storefront work with operational improvements. Our own multilingual site also provides inspectable first-party publishing and release-process context; it is separate from customer outcome evidence.

### [MyMerch](/case-studies/mymerch/)
- **Status:** Live
- **Outcome:** ~50% - Efficiency Gain (Client-Reported)
- **Summary:** ~50% efficiency gain (client-reported). Delivery errors reduced, Shopify storefront conversion lifted, no rewrite.
- **Stack:** Shopify, Shopify Liquid, JavaScript

These are selected projects, not our full portfolio. We have shipped 75+ products since 2018.

## Questions before you start

### Do we need a headless CMS?

Only if structured content, frontend needs or multiple channels justify it. A healthy existing CMS or a simpler static setup may fit better.

### Can our team edit and preview the content?

Define editor tasks and test them in the selected system. A CMS category alone does not guarantee a usable preview, approval process or translation workflow.

### What happens to existing URLs and rankings?

Include a URL inventory, redirect map and technical search checks in the migration scope. No architecture or migration plan can guarantee retained rankings.

### What is included after launch?

Agree content entry, training, hosting, CMS administration and support explicitly. Access, export and ownership terms need checking for the chosen tools; headless alone does not remove lock-in.

## Continue with the decision you need

- [Choosing a CMS for your publishing team](/software-development-guide/headless-cms-vs-traditional-cms/)
- [When the project is a web application](/services/web-apps/)
- [Assessing an inherited website](/services/software-takeover/)

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/services/website-development/#service",
      "@type": "Service",
      "areaServed": [
        {
          "@type": "Country",
          "name": "Austria"
        },
        {
          "@type": "Place",
          "name": "Worldwide"
        }
      ],
      "category": "Software Development",
      "dateModified": "2026-10-19",
      "description": "Create or rebuild a business website with an editing workflow that fits your team. Explore CMS choices, content migration, multilingual delivery and handover.",
      "name": "A business website your team can keep up to date.",
      "provider": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "serviceType": "Website Development and CMS",
      "url": "https://wavect.io/services/website-development/"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "item": "https://wavect.io/",
          "name": "Home",
          "position": 1
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/services/overview/",
          "name": "Services",
          "position": 2
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/services/overview/#software",
          "name": "Software Development",
          "position": 3
        },
        {
          "@type": "ListItem",
          "item": "https://wavect.io/services/website-development/",
          "name": "Website Development and CMS",
          "position": 4
        }
      ]
    },
    {
      "@id": "https://wavect.io/services/website-development/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-10-19",
      "description": "Create or rebuild a business website with an editing workflow that fits your team. Explore CMS choices, content migration, multilingual delivery and handover.",
      "inLanguage": "en",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "mainEntity": {
        "@id": "https://wavect.io/services/website-development/#service"
      },
      "name": "A business website your team can keep up to date.",
      "url": "https://wavect.io/services/website-development/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Only if structured content, frontend needs or multiple channels justify it. A healthy existing CMS or a simpler static setup may fit better."
      },
      "name": "Do we need a headless CMS?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Define editor tasks and test them in the selected system. A CMS category alone does not guarantee a usable preview, approval process or translation workflow."
      },
      "name": "Can our team edit and preview the content?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Include a URL inventory, redirect map and technical search checks in the migration scope. No architecture or migration plan can guarantee retained rankings."
      },
      "name": "What happens to existing URLs and rankings?"
    },
    {
      "@type": "Question",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Agree content entry, training, hosting, CMS administration and support explicitly. Access, export and ownership terms need checking for the chosen tools; headless alone does not remove lock-in."
      },
      "name": "What is included after launch?"
    }
  ],
  "speakable": {
    "@type": "SpeakableSpecification",
    "cssSelector": [
      ".faq-question",
      ".faq-answer"
    ]
  }
}
```
