Added SEO
This commit is contained in:
parent
88386d6d7e
commit
a5f1e1ac1c
@ -1,6 +1,48 @@
|
||||
@{
|
||||
ViewData["Title"] = "Finally finish your novel";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "PlotWeaver Studio | Novel Planning Software for Authors";
|
||||
ViewData["SeoDescription"] = "PlotWeaver Studio helps authors organise characters, plot threads, timelines, story assets, relationships, and continuity so they can finish complex novels with confidence.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/";
|
||||
ViewData["StructuredData"] = new[]
|
||||
{
|
||||
"""
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "PlotWeaver Studio",
|
||||
"url": "https://plotweaver.studio",
|
||||
"description": "Novel planning and story organisation software for authors."
|
||||
}
|
||||
""",
|
||||
"""
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "PlotWeaver Studio",
|
||||
"applicationCategory": "WritingApplication",
|
||||
"operatingSystem": "Web",
|
||||
"description": "Novel planning software for authors to organise characters, plot threads, timelines, story assets, relationships, continuity, and series.",
|
||||
"url": "https://plotweaver.studio",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"priceCurrency": "GBP",
|
||||
"availability": "https://schema.org/InStock"
|
||||
}
|
||||
}
|
||||
""",
|
||||
"""
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "PlotWeaver Studio",
|
||||
"url": "https://plotweaver.studio",
|
||||
"logo": "https://plotweaver.studio/android-chrome-512x512.png",
|
||||
"sameAs": []
|
||||
}
|
||||
"""
|
||||
};
|
||||
}
|
||||
|
||||
<article class="marketing-home">
|
||||
|
||||
@ -3,6 +3,29 @@
|
||||
@{
|
||||
ViewData["Title"] = "Pricing";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "Pricing | PlotWeaver Studio";
|
||||
ViewData["SeoDescription"] = "Compare PlotWeaver Studio plans and choose the right subscription for organising your novel, series, characters, plot threads, timelines, and story details.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/pricing";
|
||||
ViewData["StructuredData"] = new[]
|
||||
{
|
||||
"""
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "PlotWeaver Studio",
|
||||
"applicationCategory": "WritingApplication",
|
||||
"operatingSystem": "Web",
|
||||
"description": "Novel planning software for authors to organise characters, plot threads, timelines, story assets, relationships, continuity, and series.",
|
||||
"url": "https://plotweaver.studio",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"priceCurrency": "GBP",
|
||||
"availability": "https://schema.org/InStock"
|
||||
}
|
||||
}
|
||||
"""
|
||||
};
|
||||
var paidPlans = Model.Plans.Where(x => x.RequiresStripeSubscription).ToList();
|
||||
var suggestedPlanId = paidPlans.Count >= 2 ? paidPlans[paidPlans.Count / 2].SubscriptionLevelID : (int?)null;
|
||||
}
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
@{
|
||||
ViewData["Title"] = "About";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "About PlotWeaver Studio | Built for Novelists";
|
||||
ViewData["SeoDescription"] = "Learn why PlotWeaver Studio was created by a novelist to help writers organise complex stories, manage continuity, and finish their books with confidence.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/about";
|
||||
}
|
||||
|
||||
<article class="marketing-home public-info-page">
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
@{
|
||||
ViewData["Title"] = "Contact";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "Contact PlotWeaver Studio";
|
||||
ViewData["SeoDescription"] = "Contact PlotWeaver Studio for support, questions, feedback, or feature suggestions about our novel planning and story organisation platform.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/contact";
|
||||
}
|
||||
|
||||
<article class="marketing-home public-info-page">
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
@{
|
||||
ViewData["Title"] = "Privacy Policy";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "Privacy Policy | PlotWeaver Studio";
|
||||
ViewData["SeoDescription"] = "Read the PlotWeaver Studio Privacy Policy to learn how we protect your account information, subscription data, and story content.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/privacy";
|
||||
}
|
||||
|
||||
<article class="marketing-home public-info-page">
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
@{
|
||||
ViewData["Title"] = "Terms of Service";
|
||||
ViewData["ShellClass"] = "marketing-shell";
|
||||
ViewData["SeoTitle"] = "Terms of Service | PlotWeaver Studio";
|
||||
ViewData["SeoDescription"] = "Read the PlotWeaver Studio Terms of Service for information about subscriptions, user content, acceptable use, and account responsibilities.";
|
||||
ViewData["SeoKeywords"] = "novel planning software, writing software, story planning app, author tools, plot tracking, character tracking, story timeline, novel organisation, fiction writing software, series writing software, continuity tracking, plot threads, story bible";
|
||||
ViewData["CanonicalUrl"] = "https://plotweaver.studio/terms";
|
||||
}
|
||||
|
||||
<article class="marketing-home public-info-page">
|
||||
|
||||
@ -1,9 +1,61 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" data-theme="light" data-bs-theme="light">
|
||||
@{
|
||||
var shellClass = ViewData["ShellClass"] as string ?? string.Empty;
|
||||
var isMarketingPage = shellClass.Contains("marketing-shell", StringComparison.OrdinalIgnoreCase);
|
||||
var defaultTitle = $"{ViewData["Title"]} - PlotWeaver Studio";
|
||||
var seoTitle = isMarketingPage && ViewData["SeoTitle"] is string seoTitleValue ? seoTitleValue : defaultTitle;
|
||||
var seoDescription = isMarketingPage && ViewData["SeoDescription"] is string seoDescriptionValue ? seoDescriptionValue : null;
|
||||
var canonicalUrl = isMarketingPage && ViewData["CanonicalUrl"] is string canonicalUrlValue ? canonicalUrlValue : null;
|
||||
var seoKeywords = isMarketingPage && ViewData["SeoKeywords"] is string seoKeywordsValue ? seoKeywordsValue : null;
|
||||
var structuredData = isMarketingPage && ViewData["StructuredData"] is IEnumerable<string> structuredDataValues ? structuredDataValues : Array.Empty<string>();
|
||||
const string ogImageUrl = "https://plotweaver.studio/og-image.png";
|
||||
}
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>@ViewData["Title"] - PlotWeaver Studio</title>
|
||||
<title>@seoTitle</title>
|
||||
@if (isMarketingPage)
|
||||
{
|
||||
@if (!string.IsNullOrWhiteSpace(seoDescription))
|
||||
{
|
||||
<meta name="description" content="@seoDescription" />
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(seoKeywords))
|
||||
{
|
||||
<meta name="keywords" content="@seoKeywords" />
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(canonicalUrl))
|
||||
{
|
||||
<link rel="canonical" href="@canonicalUrl" />
|
||||
}
|
||||
<meta name="robots" content="index, follow" />
|
||||
<meta property="og:site_name" content="PlotWeaver Studio" />
|
||||
<meta property="og:title" content="@seoTitle" />
|
||||
@if (!string.IsNullOrWhiteSpace(seoDescription))
|
||||
{
|
||||
<meta property="og:description" content="@seoDescription" />
|
||||
}
|
||||
<meta property="og:type" content="website" />
|
||||
@if (!string.IsNullOrWhiteSpace(canonicalUrl))
|
||||
{
|
||||
<meta property="og:url" content="@canonicalUrl" />
|
||||
}
|
||||
<meta property="og:image" content="@ogImageUrl" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="@seoTitle" />
|
||||
@if (!string.IsNullOrWhiteSpace(seoDescription))
|
||||
{
|
||||
<meta name="twitter:description" content="@seoDescription" />
|
||||
}
|
||||
<meta name="twitter:image" content="@ogImageUrl" />
|
||||
@foreach (var jsonLd in structuredData)
|
||||
{
|
||||
@Html.Raw("<script type=\"application/ld+json\">")
|
||||
@Html.Raw(jsonLd)
|
||||
@Html.Raw("</script>")
|
||||
}
|
||||
}
|
||||
<script>
|
||||
(() => {
|
||||
let savedTheme = null;
|
||||
@ -31,10 +83,6 @@
|
||||
<meta name="msapplication-config" content="/browserconfig.xml" />
|
||||
<meta name="msapplication-TileColor" content="#1F2A44" />
|
||||
<meta name="theme-color" content="#1F2A44" />
|
||||
<meta property="og:site_name" content="PlotWeaver Studio" />
|
||||
<meta property="og:title" content="PlotWeaver Studio" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/og-image.png" />
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
@ -139,6 +187,7 @@
|
||||
<div class="marketing-container public-footer__inner">
|
||||
<a class="public-footer__brand" asp-controller="Home" asp-action="Index">PlotWeaver Studio</a>
|
||||
<nav class="public-footer__nav" aria-label="Footer navigation">
|
||||
<a asp-controller="Home" asp-action="Index">Home</a>
|
||||
<a asp-controller="Public" asp-action="About">About</a>
|
||||
<a asp-controller="Pricing" asp-action="Index">Pricing</a>
|
||||
<a asp-controller="Public" asp-action="Contact">Contact</a>
|
||||
|
||||
21
PlotLine/wwwroot/robots.txt
Normal file
21
PlotLine/wwwroot/robots.txt
Normal file
@ -0,0 +1,21 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /Account/
|
||||
Disallow: /ManageAccount/
|
||||
Disallow: /Projects/
|
||||
Disallow: /Books/
|
||||
Disallow: /Chapters/
|
||||
Disallow: /Scenes/
|
||||
Disallow: /Characters/
|
||||
Disallow: /PlotLines/
|
||||
Disallow: /PlotThreads/
|
||||
Disallow: /StoryAssets/
|
||||
Disallow: /Timeline/
|
||||
Disallow: /Analytics/
|
||||
Disallow: /Writer/
|
||||
Disallow: /Imports/
|
||||
Disallow: /Archives/
|
||||
Disallow: /HelpDrawer/
|
||||
Disallow: /HelpDiagnostics/
|
||||
|
||||
Sitemap: https://plotweaver.studio/sitemap.xml
|
||||
33
PlotLine/wwwroot/sitemap.xml
Normal file
33
PlotLine/wwwroot/sitemap.xml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/</loc>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/pricing</loc>
|
||||
<changefreq>weekly</changefreq>
|
||||
<priority>0.8</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/about</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.6</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/contact</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>0.5</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/privacy</loc>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://plotweaver.studio/terms</loc>
|
||||
<changefreq>yearly</changefreq>
|
||||
<priority>0.3</priority>
|
||||
</url>
|
||||
</urlset>
|
||||
Loading…
x
Reference in New Issue
Block a user