{"id":22952,"date":"2025-07-18T05:29:00","date_gmt":"2025-07-18T09:29:00","guid":{"rendered":"https:\/\/dinorank.com\/en-us\/blog-seo\/?p=22952"},"modified":"2025-11-03T09:04:36","modified_gmt":"2025-11-03T14:04:36","slug":"seo-for-saas","status":"publish","type":"post","link":"https:\/\/dinorank.com\/en-us\/blog-seo\/seo-for-saas\/","title":{"rendered":"SEO for SaaS: a practical guide to boost your sales"},"content":{"rendered":"\n<p>If you\u2019ve ever been part of a software project, you know that developing a web application is an expensive process filled with obstacles. That\u2019s why many people think that once the product is finished, the hard work is over.<\/p>\n\n\n\n<p>In reality, it\u2019s only the beginning.<\/p>\n\n\n\n<p>The toughest part starts now: getting someone to actually pay for your product.<\/p>\n\n\n\n<p>In this article, <strong>I want to talk to you about SEO for SaaS<\/strong> \u2014 one of the most profitable strategies I know to get your project noticed and reach your potential customers naturally, without resorting to invasive promotions that might turn them away.<\/p>\n\n\n\n<p>With SEO for SaaS, you\u2019re not the one knocking on your future users\u2019 doors. They\u2019ll come to you looking for help, and you\u2019ll show them you have exactly what they need to solve their problem.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/dinorank.com\/en-us\/blog-seo\/discover-dinorank\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"450\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords.png\" alt=\"Find the best keywords\" class=\"wp-image-22028\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords.png 1000w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords-300x135.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords-768x346.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure>\n\n\n\n<p>Want to know how to do it? Then don\u2019t miss what\u2019s coming next.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is a SaaS? <\/h2>\n\n\n\n<p>A <strong>SaaS<\/strong> is an online business model that offers a software application that runs on the internet, usually through a subscription or recurring payment model.<\/p>\n\n\n\n<p class=\"has-background\" style=\"background-color:#eef9f3\">The term SaaS comes from the English \u201c<strong>Software as a Service<\/strong>,\u201d and it has the advantage of eliminating the need for prior installations, powerful hardware infrastructure, or costly maintenance.<\/p>\n\n\n\n<p>A good internet connection and a web browser are all a user needs to work with the software, since it runs directly in the cloud.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"1024\" height=\"635\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/03\/seo-saas-concept.png\" alt=\"SEO for SaaS Concept\" class=\"wp-image-20891\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/03\/seo-saas-concept.png 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/03\/seo-saas-concept-300x186.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/03\/seo-saas-concept-768x476.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Examples of SaaS companies we all know<\/h3>\n\n\n\n<p>You might not realize it, but you use more SaaS platforms in your daily life than you think.<\/p>\n\n\n<div class=\"su-list\" style=\"margin-left:0px\">\n\n\n\n<ul class=\"wp-block-list\">\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Do you use Google apps? Gmail, Google Calendar, Google Docs\u2026<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Do you store your files on Dropbox or Google Drive?<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Have you ever made video calls with Zoom or Skype?<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Do you use WhatsApp or Telegram to message friends or family?<\/li>\n<\/ul>\n\n\n\n<\/div>\n\n\n\n<p>For an SEO professional, many of their work tools are SaaS. This is the case with <a href=\"https:\/\/dinorank.com\/en-us\/blog-seo\/ahrefs-alternatives\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ahrefs<\/a>, Semrush, Google Search Console, or DinoRANK \u2014 all of them are SaaS.<\/p>\n\n\n\n<p>Today, more and more companies are choosing to build a SaaS and base their business model and growth on it.<\/p>\n\n\n\n<p>This is where \u201cSEO for SaaS\u201d plays a key role in a startup or company\u2019s marketing strategy, as <strong>it allows them to show up with the solution right in front of the people<\/strong> who have the problem or need that the SaaS is solving.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s the importance of SEO for a SaaS business?<\/h2>\n\n\n\n<p>If you run a SaaS business, <strong>you should see SEO as a core part of your online marketing strategy<\/strong>.<\/p>\n\n\n\n<p>Paid advertising, when done right, is an efficient way to get your product noticed and generate sales. However, it comes with a fairly high cost that must be kept under control.<\/p>\n\n\n\n<p>Social media is another powerful channel to build brand awareness, but it requires consistency and, in most cases, <strong>the audience you can reach is limited<\/strong>. It\u2019s also easy to reach a saturation point where your audience becomes disengaged.<\/p>\n\n\n<div class=\"su-box su-box-style-default\" id=\"\" style=\"border-color:#00604a;border-radius:3px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#00937D;color:#FFFFFF;border-top-left-radius:1px;border-top-right-radius:1px\">SEO for SaaS also involves an initial investment:<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:1px;border-bottom-right-radius:1px\">\n\n\n\n<p>The difference is that once you\u2019ve done the work to rank, your results can last over time and continue generating sales with very little ongoing effort. This is why the long-term return is often better.<\/p>\n\n\n\n<\/div><\/div>\n\n\n\n<p>Plus, SEO responds to genuine interest.<\/p>\n\n\n\n<p>Ads or social media posts are inherently a bit intrusive \u2014 <strong>the user doesn\u2019t necessarily care about what you\u2019re showing them<\/strong> at that moment.<\/p>\n\n\n\n<p>However, when someone searches on Google, it\u2019s because they have a problem \u2014 and you\u2019re going to provide the solution.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"900\" height=\"509\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Ask-SEO-tool-to-Google.jpg\" alt=\"SEO tool\" class=\"wp-image-22984\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Ask-SEO-tool-to-Google.jpg 900w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Ask-SEO-tool-to-Google-300x170.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Ask-SEO-tool-to-Google-768x434.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure><\/div>\n\n\n<p>If you manage to rank in the top positions for strategic searches, you\u2019ll attract highly qualified users to your site. <\/p>\n\n\n\n<p>Many of them will end up subscribing to your service because it solves their specific need.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What\u2019s one of the core concepts of an SEO strategy for SaaS companies?<\/h2>\n\n\n\n<p>Let\u2019s go back to the phrase that closed the previous section:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cUsers will end up subscribing to your service because it solves their need.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>When you do SEO for SaaS, <strong>your goal isn\u2019t to get just anyone to visit your website<\/strong> \u2014 it\u2019s to attract users who have a problem you can actually solve.<\/p>\n\n\n\n<p>If you create useful, valuable content for your target audience, you\u2019ll build a high level of trust in your brand, making them more likely to return to your site whenever they face similar challenges or needs.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"509\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Blog-USA-DinoRANK.jpg\" alt=\"Blog USA DinoRANK\" class=\"wp-image-22986\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Blog-USA-DinoRANK.jpg 900w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Blog-USA-DinoRANK-300x170.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Blog-USA-DinoRANK-768x434.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure><\/div>\n\n\n<p>The beauty of SEO is that it always addresses the user\u2019s main concern while introducing them to your tool \u2014 a practical software solution that solves a need, whether practical or theoretical, offering a faster, more automated, and more cost-effective answer to their problem.<\/p>\n\n\n\n<p>This is how you spark interest in your SaaS, earn user trust, and with every new interaction, increase the likelihood of converting them into paying customers.<\/p>\n\n\n\n<p class=\"has-background\" style=\"background-color:#eef9f3\">You\u2019ll turn them into loyal \u2014 and likely recurring \u2014 clients who trust your software because you\u2019ve proven its usefulness and delivered value through your SEO content. <\/p>\n\n\n\n<p>Over time, if your SaaS continues to meet their expectations and needs month after month, it\u2019s easy for those customers to become evangelists for your product.<\/p>\n\n\n\n<div id=\"brxe-dac047\" class=\"brxe-block p-2 gap-15\"><div id=\"brxe-481bc6\" class=\"brxe-text-basic h3\">Another SEO newsletter?\n\nYes.\n<\/div><div id=\"brxe-b11ebb\" class=\"brxe-text-basic\">This is what we can offer you:<\/div><div id=\"brxe-97bf62\" class=\"brxe-text-basic\"><strong>No fluff, no hype. 100% honesty. 100% straight to the point<\/strong>. All we need is your email and a bit of your attention\u2014we\u2019ll handle the rest.\n\nIt\u2019s your call.\n<\/div><div id=\"brxe-omkwmy\" data-script-id=\"omkwmy\" class=\"brxe-code\"><style>@import url(https:\/\/fonts.bunny.net\/css?family=source-sans-pro:400,700);<\/style>\n<style>\n#_form_311_{font-size:14px;line-height:1.6;font-family:arial, helvetica, sans-serif;margin:0}#_form_311_ *{outline:0}._form_hide{display:none;visibility:hidden}._form_show{display:block;visibility:visible}#_form_311_._form-top{top:0}#_form_311_._form-bottom{bottom:0}#_form_311_._form-left{left:0}#_form_311_._form-right{right:0}#_form_311_ input[type=\"text\"],#_form_311_ input[type=\"tel\"],#_form_311_ input[type=\"date\"],#_form_311_ textarea{padding:6px;height:auto;border:#979797 1px solid;border-radius:4px;color:#000 !important;font-size:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}#_form_311_ textarea{resize:none}#_form_311_ ._submit{-webkit-appearance:none;cursor:pointer;font-family:arial, sans-serif;font-size:14px;text-align:center;background:#00C4A7 !important;border:0 !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important;border-radius:3px !important;color:#FFFFFF !important;padding:14px !important}#_form_311_ ._submit:disabled{cursor:not-allowed;opacity:0.4}#_form_311_ ._submit.processing{position:relative}#_form_311_ ._submit.processing::before{content:\"\";width:1em;height:1em;position:absolute;z-index:1;top:50%;left:50%;border:double 3px transparent;border-radius:50%;background-image:linear-gradient(#00C4A7, #00C4A7), conic-gradient(#00C4A7, #FFFFFF);background-origin:border-box;background-clip:content-box, border-box;animation:1200ms ease 0s infinite normal none running _spin}#_form_311_ ._submit.processing::after{content:\"\";position:absolute;top:0;bottom:0;left:0;right:0;background:#00C4A7 !important;border:0 !important;-moz-border-radius:3px !important;-webkit-border-radius:3px !important;border-radius:3px !important;color:#FFFFFF !important;padding:14px !important}@keyframes _spin{0%{transform:translate(-50%, -50%) rotate(90deg)}100%{transform:translate(-50%, -50%) rotate(450deg)}}#_form_311_ ._close-icon{cursor:pointer;background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/esfkyjh1u_forms-close-dark.png\");background-repeat:no-repeat;background-size:14.2px 14.2px;position:absolute;display:block;top:11px;right:9px;overflow:hidden;width:16.2px;height:16.2px}#_form_311_ ._close-icon:before{position:relative}#_form_311_ ._form-body{margin-bottom:30px}#_form_311_ ._form-image-left{width:150px;float:left}#_form_311_ ._form-content-right{margin-left:164px}#_form_311_ ._form-branding{color:#fff;font-size:10px;clear:both;text-align:left;margin-top:30px;font-weight:100}#_form_311_ ._form-branding ._logo{display:block;width:130px;height:14px;margin-top:6px;background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/hh9ujqgv5_aclogo_li.png\");background-size:130px auto;background-repeat:no-repeat}#_form_311_ .form-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}#_form_311_ ._form-label,#_form_311_ ._form_element ._form-label{font-weight:bold;margin-bottom:5px;display:block}#_form_311_._dark ._form-branding{color:#333}#_form_311_._dark ._form-branding ._logo{background-image:url(\"https:\/\/d226aj4ao1t61q.cloudfront.net\/jftq2c8s_aclogo_dk.png\")}#_form_311_ ._form_element{position:relative;margin-bottom:10px;font-size:0;max-width:100%}#_form_311_ ._form_element *{font-size:14px}#_form_311_ ._form_element._clear{clear:both;width:100%;float:none}#_form_311_ ._form_element._clear:after{clear:left}#_form_311_ ._form_element input[type=\"text\"],#_form_311_ ._form_element input[type=\"date\"],#_form_311_ ._form_element select,#_form_311_ ._form_element textarea:not(.g-recaptcha-response){display:block;width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-family:inherit}#_form_311_ ._field-wrapper{position:relative}#_form_311_ ._inline-style{float:left}#_form_311_ ._inline-style input[type=\"text\"]{width:150px}#_form_311_ ._inline-style:not(._clear){margin-right:20px}#_form_311_ ._form_element img._form-image{max-width:100%}#_form_311_ ._form_element ._form-fieldset{border:0;padding:0.01em 0 0 0;margin:0;min-width:0}#_form_311_ ._clear-element{clear:left}#_form_311_ ._full_width{width:100%}#_form_311_ ._form_full_field{display:block;width:100%;margin-bottom:10px}#_form_311_ input[type=\"text\"]._has_error,#_form_311_ textarea._has_error{border:#F37C7B 1px solid}#_form_311_ input[type=\"checkbox\"]._has_error{outline:#F37C7B 1px solid}#_form_311_ ._show_be_error{float:left}#_form_311_ ._error{display:block;position:absolute;font-size:14px;z-index:10000001}#_form_311_ ._error._above{padding-bottom:4px;bottom:39px;right:0}#_form_311_ ._error._below{padding-top:8px;top:100%;right:0}#_form_311_ ._error._above ._error-arrow{bottom:-4px;right:15px;border-left:8px solid transparent;border-right:8px solid transparent;border-top:8px solid #FFDDDD}#_form_311_ ._error._below ._error-arrow{top:0;right:15px;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #FFDDDD}#_form_311_ ._error-inner{padding:12px 12px 12px 36px;background-color:#FFDDDD;background-image:url(\"data:image\/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http:\/\/www.w3.org\/2000\/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M16 8C16 12.4183 12.4183 16 8 16C3.58172 16 0 12.4183 0 8C0 3.58172 3.58172 0 8 0C12.4183 0 16 3.58172 16 8ZM9 3V9H7V3H9ZM9 13V11H7V13H9Z' fill='%23CA0000'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:12px center;font-size:14px;font-family:arial, sans-serif;font-weight:600;line-height:16px;color:#000;text-align:center;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;box-shadow:0 1px 4px rgba(31, 33, 41, 0.298295)}@media only screen and (max-width:319px){#_form_311_ ._error-inner{padding:7px 7px 7px 25px;font-size:12px;line-height:12px;background-position:4px center;max-width:100px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}}#_form_311_ ._error-inner._form_error{margin-bottom:5px;text-align:left}#_form_311_ ._button-wrapper ._error-inner._form_error{position:static}#_form_311_ ._error-inner._no_arrow{margin-bottom:10px}#_form_311_ ._error-arrow{position:absolute;width:0;height:0}#_form_311_ ._error-html{margin-bottom:10px}.pika-single{z-index:10000001 !important}#_form_311_ input[type=\"text\"].datetime_date{width:69%;display:inline}#_form_311_ select.datetime_time{width:29%;display:inline;height:32px}#_form_311_ input[type=\"date\"].datetime_date{width:69%;display:inline-flex}#_form_311_ input[type=\"time\"].datetime_time{width:29%;display:inline-flex}@media (min-width:320px) and (max-width:667px){::-webkit-scrollbar{display:none}#_form_311_{margin:0;width:100%;min-width:100%;max-width:100%;box-sizing:border-box}#_form_311_ *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;font-size:1em}#_form_311_ ._form-content{margin:0;width:100%}#_form_311_ ._form-inner{display:block;min-width:100%}#_form_311_ ._form-title,#_form_311_ ._inline-style{margin-top:0;margin-right:0;margin-left:0}#_form_311_ ._form-title{font-size:1.2em}#_form_311_ ._form_element{margin:0 0 20px;padding:0;width:100%}#_form_311_ ._form-element,#_form_311_ ._inline-style,#_form_311_ input[type=\"text\"],#_form_311_ label,#_form_311_ p,#_form_311_ textarea:not(.g-recaptcha-response){float:none;display:block;width:100%}#_form_311_ ._row._checkbox-radio label{display:inline}#_form_311_ ._row,#_form_311_ p,#_form_311_ label{margin-bottom:0.7em;width:100%}#_form_311_ ._row input[type=\"checkbox\"],#_form_311_ ._row input[type=\"radio\"]{margin:0 !important;vertical-align:middle !important}#_form_311_ ._row input[type=\"checkbox\"]+span label{display:inline}#_form_311_ ._row span label{margin:0 !important;width:initial !important;vertical-align:middle !important}#_form_311_ ._form-image{max-width:100%;height:auto !important}#_form_311_ input[type=\"text\"]{padding-left:10px;padding-right:10px;font-size:16px;line-height:1.3em;-webkit-appearance:none}#_form_311_ input[type=\"radio\"],#_form_311_ input[type=\"checkbox\"]{display:inline-block;width:1.3em;height:1.3em;font-size:1em;margin:0 0.3em 0 0;vertical-align:baseline}#_form_311_ button[type=\"submit\"]{padding:20px;font-size:1.5em}#_form_311_ ._inline-style{margin:20px 0 0 !important}#_form_311_ ._inline-style input[type=\"text\"]{width:100%}}#_form_311_ .sms_consent_checkbox{position:relative;width:100%;display:flex;align-items:flex-start;padding:20px 0}#_form_311_ .sms_consent_checkbox input[type=\"checkbox\"]{float:left;margin:5px 10px 10px 0}#_form_311_ .sms_consent_checkbox .sms_consent_message{display:inline;float:left;text-align:left;margin-bottom:10px;font-size:14px;color:#7D8799}#_form_311_ .sms_consent_checkbox .sms_consent_message.sms_consent_mini{width:90%}#_form_311_ .sms_consent_checkbox ._error._above{right:auto;bottom:0}#_form_311_ .sms_consent_checkbox ._error._above ._error-arrow{right:auto;left:5px}@media (min-width:320px) and (max-width:667px){#_form_311_ .sms_consent_checkbox ._error._above{top:-30px;left:0;bottom:auto}}#_form_311_ .field-required{color:#FF0000}#_form_311_{position:relative;text-align:left;margin:25px auto 0;padding:20px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background:rgba(255, 255, 255, 0) !important;border-top:0px solid #737373 !important;border-right:0px solid #737373 !important;border-bottom:0px solid #737373 !important;border-left:0px solid #737373 !important;max-width:800px;-moz-border-radius:1px !important;-webkit-border-radius:1px !important;border-radius:1px !important;color:#000000}#_form_311_ ._show_be_error{min-width:100%}#_form_311_._inline-form,#_form_311_._inline-form ._form-content{font-family:Source Sans Pro;font-size:14px;font-weight:400}#_form_311_._inline-form ._row span,#_form_311_._inline-form ._row label{font-family:Source Sans Pro;font-size:14px;font-weight:400;line-height:1.6em;color:#888 !important}#_form_311__inlineform input[type=\"text\"],#_form_311__inlineform input[type=\"date\"],#_form_311__inlineform input[type=\"tel\"],#_form_311__inlineform select,#_form_311__inlineform textarea:not(.g-recaptcha-response){font-family:Source Sans Pro;font-size:14px;font-weight:400;font-color:#000000;line-height:1.6em}#_form_311_._inline-form ._html-code *:not(h1, h2, h3, h4, h5, h6),#_form_311_._inline-form .sms_consent_message,#_form_311_._inline-form ._form-thank-you{font-family:Source Sans Pro;font-size:14px;font-weight:400;color:#888 !important}#_form_311_._inline-form ._form-label,#_form_311_._inline-form ._form-emailidentifier,#_form_311_._inline-form ._form-checkbox-option-label{font-family:Source Sans Pro;font-size:14px;font-weight:700;line-height:1.6em;color:#888 !important}#_form_311_._inline-form ._submit{margin-top:12px;font-family:Source Sans Pro;font-size:14px;font-weight:400}#_form_311_._inline-form ._html-code h1,#_form_311_._inline-form ._html-code h2,#_form_311_._inline-form ._html-code h3,#_form_311_._inline-form ._html-code h4,#_form_311_._inline-form ._html-code h5,#_form_311_._inline-form ._html-code h6,#_form_311_._inline-form ._form-title{font-family:Source Sans Pro;font-size:22px;line-height:normal;font-weight:700;color:black;margin-bottom:0;display:block}#_form_311_._inline-form ._form-branding{font-family:\"IBM Plex Sans\", Helvetica, sans-serif;font-size:13px;font-weight:100;font-style:normal;text-decoration:none}#_form_311_:before,#_form_311_:after{content:\" \";display:table}#_form_311_:after{clear:both}#_form_311_._inline-style{width:auto;display:inline-block}#_form_311_._inline-style input[type=\"text\"],#_form_311_._inline-style input[type=\"date\"]{padding:10px 12px}#_form_311_._inline-style button._inline-style{position:relative;top:27px}#_form_311_._inline-style p{margin:0}#_form_311_._inline-style ._button-wrapper{position:relative;margin:16px 12.5px 0 20px}#_form_311_ ._form-thank-you{position:relative;left:0;right:0;text-align:center;font-size:18px}#_form_311_ ._form-pc-confirmation ._submit{margin-top:16px}@media (min-width:320px) and (max-width:667px){#_form_311_._inline-form._inline-style ._inline-style._button-wrapper{margin-top:20px !important;margin-left:0 !important}}#_form_311_ .iti{width:100%}#_form_311_ .iti.iti--allow-dropdown.iti--separate-dial-code{width:100%}#_form_311_ .iti input{width:100%;border:#979797 1px solid;border-radius:4px}#_form_311_ .iti--separate-dial-code .iti__selected-flag{background-color:#FFFFFF;border-radius:4px}#_form_311_ .iti--separate-dial-code .iti__selected-flag:hover{background-color:rgba(0, 0, 0, 0.05)}#_form_311_ .iti__country-list{border-radius:4px;margin-top:4px;min-width:460px}#_form_311_ .iti__country-list--dropup{margin-bottom:4px}#_form_311_ .phone-error-hidden{display:none}#_form_311_ .phone-error{color:#E40E49}#_form_311_ .phone-input-error{border:1px solid #E40E49 !important}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field fieldset{margin:0;margin-bottom:1.1428571429em;border:none;padding:0}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field fieldset:last-child{margin-bottom:0}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field legend{margin-bottom:1.1428571429em}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field label{display:flex;align-items:flex-start;justify-content:flex-start;margin-bottom:0.8571428571em}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field label:last-child{margin-bottom:0}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field input{margin:0;margin-right:8px}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-label{display:block;font-weight:400;margin-top:-4px}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-label-with-description{display:block;font-weight:700;margin-top:-4px}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field ._form-checkbox-option-description{margin:0;font-size:0.8571428571em}#_form_311_._inline-form ._form-content ._form-list-subscriptions-field ._form-subscriptions-unsubscribe-all-description{line-height:normal;margin-top:-2px}\n#_form_311_ ._submit{width:100%;font-family:\"Source Sans Pro\", Sans-serif !important;font-size:18px !important;font-weight:500 !important}#_form_311_ ._submit:hover{background-color:#04937E !important}#_form_311_ input#email{padding:3px 12px;background-color:#ffffff;border-radius:2px}#_form_311_._form{margin-top:-5px}#_form_311_ ._error._below{position:relative !important}#_form_311_ ._error._above{position:absolute !important}@media (min-width:320px) and (max-width:667px){#_form_311_ ._form_element{margin:0 0 0px}}<\/style>\n<form method=\"POST\" action=\"https:\/\/deandelafuenteromero.activehosted.com\/proc.php\" id=\"_form_311_\" class=\"_form _form_311 _inline-form  _dark\" novalidate data-styles-version=\"5\">\n  <input type=\"hidden\" name=\"u\" value=\"311\" \/>\n  <input type=\"hidden\" name=\"f\" value=\"311\" \/>\n  <input type=\"hidden\" name=\"s\" \/>\n  <input type=\"hidden\" name=\"c\" value=\"0\" \/>\n  <input type=\"hidden\" name=\"m\" value=\"0\" \/>\n  <input type=\"hidden\" name=\"act\" value=\"sub\" \/>\n  <input type=\"hidden\" name=\"v\" value=\"2\" \/>\n  <input type=\"hidden\" name=\"or\" value=\"1d0d99d99ed2973ea9179629b793b9aa\" \/>\n  <div class=\"_form-content\">\n    <div class=\"_form_element _x74577619 _full_width \" >\n      <label for=\"email\" class=\"_form-label\">\n      <\/label>\n      <div class=\"_field-wrapper\">\n        <input type=\"text\" id=\"email\" name=\"email\" placeholder=\"Enter your email\" required\/>\n      <\/div>\n    <\/div>\n    <div class=\"_form_element _x06467309 _full_width \" >\n      <fieldset class=\"_form-fieldset\">\n        <div class=\"_row\">\n          <legend for=\"field[136][]\" class=\"_form-label\">\n          <\/legend>\n        <\/div>\n        <input data-autofill=\"false\" type=\"hidden\" id=\"field[136][]\" name=\"field[136][]\" value=\"~|\">\n        <div class=\"_row _checkbox-radio\">\n          <input id=\"field_136I have read and accept the privacy policy\" type=\"checkbox\" name=\"field[136][]\"\n          value=\"I have read and accept the privacy policy\"                                                                                 required                                >\n          <span>\n            <label for=\"field_136I have read and accept the privacy policy\">\n              I have read and accept the privacy policy<span class=\"field-required\">\n              *\n            <\/span>\n          <\/label>\n        <\/span>\n      <\/div>\n    <\/fieldset>\n  <\/div>\n  <div class=\"_form_element _x77210210 _full_width \" >\n    <label for=\"ls\" class=\"_form-label\">\n      Verify that you are human<span class=\"field-required\">\n      *\n    <\/span>\n  <\/label>\n  <div class=\"g-recaptcha\" data-sitekey=\"6LcwIw8TAAAAACP1ysM08EhCgzd6q5JAOUR1a0Go\">\n  <\/div>\n<\/div>\n<div class=\"_form_element _x09639014 _full_width \" >\n  <input type=\"hidden\" name=\"field[121]\" value=\"\" \/>\n<\/div>\n<div class=\"_form_element _x64811239 _full_width \" >\n  <input type=\"hidden\" name=\"field[122]\" value=\"\" \/>\n<\/div>\n<div class=\"_form_element _x58860354 _full_width \" >\n  <input type=\"hidden\" name=\"field[123]\" value=\"\" \/>\n<\/div>\n<div class=\"_form_element _x23331849 _full_width \" >\n  <input type=\"hidden\" name=\"field[125]\" value=\"\" \/>\n<\/div>\n<div class=\"_form_element _x72046679 _full_width \" >\n  <input type=\"hidden\" name=\"field[126]\" value=\"\" \/>\n<\/div>\n<div class=\"_form_element _x41336277 _full_width \" >\n  <input type=\"hidden\" name=\"field[127]\" value=\"\" \/>\n<\/div>\n<div class=\"_button-wrapper _full_width\">\n  <button id=\"_form_311_submit\" class=\"_submit\" type=\"submit\">\n    Subscribe here\n  <\/button>\n<\/div>\n<div class=\"_clear-element\">\n<\/div>\n<\/div>\n<div class=\"_form-thank-you\" style=\"display:none;\">\n<\/div>\n<\/form><script>\nwindow.cfields = {\"136\":\"i_have_read_and_accept_the_privacy_policy\",\"121\":\"utm_campaign\",\"122\":\"utm_source\",\"123\":\"utm_medium\",\"125\":\"utm_content\",\"126\":\"utm_adset\",\"127\":\"utm_ad\"};\nwindow._show_thank_you = function(id, message, trackcmp_url, email) {\n    var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you');\n    form.querySelector('._form-content').style.display = 'none';\n    thank_you.innerHTML = message;\n    thank_you.style.display = 'block';\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._show_unsubscribe = function(id, message, trackcmp_url, email) {\n    var form = document.getElementById('_form_' + id + '_'), unsub = form.querySelector('._form-thank-you');\n    var branding = form.querySelector('._form-branding');\n    if (branding) {\n        branding.style.display = 'none';\n    }\n    form.querySelector('._form-content').style.display = 'none';\n    unsub.style.display = 'block';\n    form.insertAdjacentHTML('afterend', message)\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._show_error = function(id, message, html) {\n    var form = document.getElementById('_form_' + id + '_'),\n        err = document.createElement('div'),\n        button = form.querySelector('button[type=\"submit\"]'),\n        old_error = form.querySelector('._form_error');\n    if (old_error) old_error.parentNode.removeChild(old_error);\n    err.innerHTML = message;\n    err.className = '_error-inner _form_error _no_arrow';\n    var wrapper = document.createElement('div');\n    wrapper.className = '_form-inner _show_be_error';\n    wrapper.appendChild(err);\n    button.parentNode.insertBefore(wrapper, button);\n    var submitButton = form.querySelector('[id^=\"_form\"][id$=\"_submit\"]');\n    submitButton.disabled = false;\n    submitButton.classList.remove('processing');\n    if (html) {\n        var div = document.createElement('div');\n        div.className = '_error-html';\n        div.innerHTML = html;\n        err.appendChild(div);\n    }\n};\nwindow._show_pc_confirmation = function(id, header, detail, show, email) {\n    var form = document.getElementById('_form_' + id + '_'), pc_confirmation = form.querySelector('._form-pc-confirmation');\n    if (pc_confirmation.style.display === 'none') {\n        form.querySelector('._form-content').style.display = 'none';\n        pc_confirmation.innerHTML = \"<div class='_form-title'>\" + header + \"<\/div>\" + \"<p>\" + detail + \"<\/p>\" +\n        \"<button class='_submit' id='hideButton'>Administrar preferencias<\/button>\";\n        pc_confirmation.style.display = 'block';\n        var mp = document.querySelector('input[name=\"mp\"]');\n        mp.value = '0';\n    } else {\n        form.querySelector('._form-content').style.display = 'inline';\n        pc_confirmation.style.display = 'none';\n    }\n\n    var hideButton = document.getElementById('hideButton');\n    \/\/ Add event listener to the button\n    hideButton.addEventListener('click', function() {\n        var submitButton = document.querySelector('#_form_311_submit');\n        submitButton.disabled = false;\n        submitButton.classList.remove('processing');\n        var mp = document.querySelector('input[name=\"mp\"]');\n        mp.value = '1';\n        const cacheBuster = new URL(window.location.href);\n        cacheBuster.searchParams.set('v', new Date().getTime());\n        window.location.href = cacheBuster.toString();\n    });\n\n    const vgoAlias = typeof visitorGlobalObjectAlias === 'undefined' ? 'vgo' : visitorGlobalObjectAlias;\n    var visitorObject = window[vgoAlias];\n    if (email && typeof visitorObject !== 'undefined') {\n        visitorObject('setEmail', email);\n        visitorObject('update');\n    } else if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) {\n        \/\/ Site tracking URL to use after inline form submission.\n        _load_script(trackcmp_url);\n    }\n    if (typeof window._form_callback !== 'undefined') window._form_callback(id);\n};\nwindow._load_script = function(url, callback, isSubmit) {\n    var head = document.querySelector('head'), script = document.createElement('script'), r = false;\n    var submitButton = document.querySelector('#_form_311_submit');\n    script.charset = 'utf-8';\n    script.src = url;\n    if (callback) {\n        script.onload = script.onreadystatechange = function() {\n            if (!r && (!this.readyState || this.readyState == 'complete')) {\n                r = true;\n                callback();\n            }\n        };\n    }\n    script.onerror = function() {\n        if (isSubmit) {\n            if (script.src.length > 10000) {\n                _show_error(\"311\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Acorta tus respuestas y vuelve a intentarlo.\");\n            } else {\n                _show_error(\"311\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Vuelve a intentarlo.\");\n            }\n            submitButton.disabled = false;\n            submitButton.classList.remove('processing');\n        }\n    }\n\n    head.appendChild(script);\n};\n(function() {\n    var iti;\n    if (window.location.search.search(\"excludeform\") !== -1) return false;\n    var getCookie = function(name) {\n        var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)'));\n        return match ? match[2] : null;\n    }\n    var setCookie = function(name, value) {\n        var now = new Date();\n        var time = now.getTime();\n        var expireTime = time + 1000 * 60 * 60 * 24 * 365;\n        now.setTime(expireTime);\n        document.cookie = name + '=' + value + '; expires=' + now + ';path=\/; Secure; SameSite=Lax;';\n    }\n    var addEvent = function(element, event, func) {\n        if (element.addEventListener) {\n            element.addEventListener(event, func);\n        } else {\n            var oldFunc = element['on' + event];\n            element['on' + event] = function() {\n                oldFunc.apply(this, arguments);\n                func.apply(this, arguments);\n            };\n        }\n    }\n    var _removed = false;\n        var form_to_submit = document.getElementById('_form_311_');\n    var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false;\n\n    var getUrlParam = function(name) {\n        if (name.toLowerCase() !== 'email') {\n            var params = new URLSearchParams(window.location.search);\n            return params.get(name) || false;\n        }\n        \/\/ email is a special case because a plus is valid in the email address\n        var qString = window.location.search;\n        if (!qString) {\n            return false;\n        }\n        var parameters = qString.substr(1).split('&');\n        for (var i = 0; i < parameters.length; i++) {\n            var parameter = parameters[i].split('=');\n            if (parameter[0].toLowerCase() === 'email') {\n                return parameter[1] === undefined ? true : decodeURIComponent(parameter[1]);\n            }\n        }\n        return false;\n    };\n\n    var acctDateFormat = \"%d\/%m\/%Y\";\n    var getNormalizedDate = function(date, acctFormat) {\n        var decodedDate = decodeURIComponent(date);\n        if (acctFormat && acctFormat.match(\/(%d|%e).*%m\/gi) !== null) {\n            return decodedDate.replace(\/(\\d{2}).*(\\d{2}).*(\\d{4})\/g, '$3-$2-$1');\n        } else if (Date.parse(decodedDate)) {\n            var dateObj = new Date(decodedDate);\n            var year = dateObj.getFullYear();\n            var month = dateObj.getMonth() + 1;\n            var day = dateObj.getDate();\n            return `${year}-${month < 10 ? `0${month}` : month}-${day < 10 ? `0${day}` : day}`;\n        }\n        return false;\n    };\n\n    var getNormalizedTime = function(time) {\n        var hour, minutes;\n        var decodedTime = decodeURIComponent(time);\n        var timeParts = Array.from(decodedTime.matchAll(\/(\\d{1,2}):(\\d{1,2})\\W*([AaPp][Mm])?\/gm))[0];\n        if (timeParts[3]) { \/\/ 12 hour format\n            var isPM = timeParts[3].toLowerCase() === 'pm';\n            if (isPM) {\n                hour = parseInt(timeParts[1]) === 12 ? '12' : `${parseInt(timeParts[1]) + 12}`;\n            } else {\n                hour = parseInt(timeParts[1]) === 12 ? '0' : timeParts[1];\n            }\n        } else { \/\/ 24 hour format\n            hour = timeParts[1];\n        }\n        var normalizedHour = parseInt(hour) < 10 ? `0${parseInt(hour)}` : hour;\n        var minutes = timeParts[2];\n        return `${normalizedHour}:${minutes}`;\n    };\n\n    for (var i = 0; i < allInputs.length; i++) {\n        var regexStr = \"field\\\\[(\\\\d+)\\\\]\";\n        var results = new RegExp(regexStr).exec(allInputs[i].name);\n        if (results != undefined) {\n            allInputs[i].dataset.name = allInputs[i].name.match(\/\\[time\\]$\/)\n                ? `${window.cfields[results[1]]}_time`\n                : window.cfields[results[1]];\n        } else {\n            allInputs[i].dataset.name = allInputs[i].name;\n        }\n        var fieldVal = getUrlParam(allInputs[i].dataset.name);\n\n        if (fieldVal) {\n            if (allInputs[i].dataset.autofill === \"false\") {\n                continue;\n            }\n            if (allInputs[i].type == \"radio\" || allInputs[i].type == \"checkbox\") {\n                if (allInputs[i].value == fieldVal) {\n                    allInputs[i].checked = true;\n                }\n            } else if (allInputs[i].type == \"date\") {\n                allInputs[i].value = getNormalizedDate(fieldVal, acctDateFormat);\n            } else if (allInputs[i].type == \"time\") {\n                allInputs[i].value = getNormalizedTime(fieldVal);\n            } else {\n                allInputs[i].value = fieldVal;\n            }\n        }\n    }\n\n    var remove_tooltips = function() {\n        for (var i = 0; i < tooltips.length; i++) {\n            tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n        }\n        tooltips = [];\n    };\n    var remove_tooltip = function(elem) {\n        for (var i = 0; i < tooltips.length; i++) {\n            if (tooltips[i].elem === elem) {\n                tooltips[i].tip.parentNode.removeChild(tooltips[i].tip);\n                tooltips.splice(i, 1);\n                return;\n            }\n        }\n    };\n    var create_tooltip = function(elem, text) {\n        var tooltip = document.createElement('div'),\n            arrow = document.createElement('div'),\n            inner = document.createElement('div'), new_tooltip = {};\n        if (elem.type != 'radio' && (elem.type != 'checkbox' || elem.name === 'sms_consent')) {\n            tooltip.className = '_error';\n            arrow.className = '_error-arrow';\n            inner.className = '_error-inner';\n            inner.innerHTML = text;\n            tooltip.appendChild(arrow);\n            tooltip.appendChild(inner);\n            elem.parentNode.appendChild(tooltip);\n        } else {\n            tooltip.className = '_error-inner _no_arrow';\n            tooltip.innerHTML = text;\n            elem.parentNode.insertBefore(tooltip, elem);\n            new_tooltip.no_arrow = true;\n        }\n        new_tooltip.tip = tooltip;\n        new_tooltip.elem = elem;\n        tooltips.push(new_tooltip);\n        return new_tooltip;\n    };\n    var resize_tooltip = function(tooltip) {\n        var rect = tooltip.elem.getBoundingClientRect();\n        var doc = document.documentElement,\n            scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop)  - (doc.clientTop || 0));\n        if (scrollPosition < 40) {\n            tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _below';\n        } else {\n            tooltip.tip.className = tooltip.tip.className.replace(\/ ?(_above|_below) ?\/g, '') + ' _above';\n        }\n    };\n    var resize_tooltips = function() {\n        if (_removed) return;\n        for (var i = 0; i < tooltips.length; i++) {\n            if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]);\n        }\n    };\n    var validate_field = function(elem, remove) {\n        var tooltip = null, value = elem.value, no_error = true;\n        remove ? remove_tooltip(elem) : false;\n        if (elem.type != 'checkbox') elem.className = elem.className.replace(\/ ?_has_error ?\/g, '');\n        if (elem.getAttribute('required') !== null) {\n            if (elem.type == 'radio' || (elem.type == 'checkbox' && \/any\/.test(elem.className))) {\n                var elems = form_to_submit.elements[elem.name];\n                if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) {\n                    no_error = elem.checked;\n                }\n                else {\n                    no_error = false;\n                    for (var i = 0; i < elems.length; i++) {\n                        if (elems[i].checked) no_error = true;\n                    }\n                }\n                if (!no_error) {\n                    tooltip = create_tooltip(elem, \"Seleccione una opci\u00f3n.\");\n                }\n            } else if (elem.type =='checkbox') {\n                var elems = form_to_submit.elements[elem.name], found = false, err = [];\n                no_error = true;\n                for (var i = 0; i < elems.length; i++) {\n                    if (elems[i].getAttribute('required') === null) continue;\n                    if (!found && elems[i] !== elem) return true;\n                    found = true;\n                    elems[i].className = elems[i].className.replace(\/ ?_has_error ?\/g, '');\n                    if (!elems[i].checked) {\n                        no_error = false;\n                        elems[i].className = elems[i].className + ' _has_error';\n                        err.push(\"Es necesario verificar %s\".replace(\"%s\", elems[i].value));\n                    }\n                }\n                if (!no_error) {\n                    tooltip = create_tooltip(elem, err.join('<br\/>'));\n                }\n            } else if (elem.tagName == 'SELECT') {\n                var selected = true;\n                if (elem.multiple) {\n                    selected = false;\n                    for (var i = 0; i < elem.options.length; i++) {\n                        if (elem.options[i].selected) {\n                            selected = true;\n                            break;\n                        }\n                    }\n                } else {\n                    for (var i = 0; i < elem.options.length; i++) {\n                        if (elem.options[i].selected\n                            && (!elem.options[i].value\n                            || (elem.options[i].value.match(\/\\n\/g)))\n                        ) {\n                            selected = false;\n                        }\n                    }\n                }\n                if (!selected) {\n                    elem.className = elem.className + ' _has_error';\n                    no_error = false;\n                    tooltip = create_tooltip(elem, \"Seleccione una opci\u00f3n.\");\n                }\n            } else if (value === undefined || value === null || value === '') {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Este campo es obligatorio.\");\n            }\n        }\n        if (no_error && elem.name == 'email') {\n            if (!value.match(\/^[\\+_a-z0-9-'&=]+(\\.[\\+_a-z0-9-']+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,})$\/i)) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Introduzca una direcci\u00f3n de correo electr\u00f3nico v\u00e1lida.\");\n            }\n        }\n        if (no_error && (elem.id == 'phone')) {\n            if (elem.value.trim() && typeof iti != 'undefined' && !iti.isValidNumber()) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Ingresa un n\u00famero de tel\u00e9fono v\u00e1lido.\");\n            }\n        }\n        if (no_error && \/date_field\/.test(elem.className)) {\n            if (!value.match(\/^\\d\\d\\d\\d-\\d\\d-\\d\\d$\/)) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Introduzca una fecha v\u00e1lida.\");\n            }\n        }\n\n        if (no_error && elem.name === 'sms_consent') {\n            const elemShouldBeChecked = (!!elem.attributes.required && !elem.checked);\n            if (elemShouldBeChecked) {\n                elem.className = elem.className + ' _has_error';\n                no_error = false;\n                tooltip = create_tooltip(elem, \"Marca esta casilla para continuar\");\n            } else {\n                elem.className = elem.className.replace(\/ ?_has_error ?\/g, '');\n            }\n        }\n        tooltip ? resize_tooltip(tooltip) : false;\n        return no_error;\n    };\n    var needs_validate = function(el) {\n        if(el.getAttribute('required') !== null){\n            return true;\n        }\n        if((el.name === 'email' || el.id === 'phone') && el.value !== \"\"){\n            return true;\n        }\n\n        return false;\n    };\n    var validate_form = function(e) {\n        var err = form_to_submit.querySelector('._form_error'), no_error = true;\n        if (!submitted) {\n            submitted = true;\n            for (var i = 0, len = allInputs.length; i < len; i++) {\n                var input = allInputs[i];\n                if (needs_validate(input)) {\n                    if (input.type == 'text' || input.type == 'number' || input.type == 'time' || input.type == 'tel') {\n                        addEvent(input, 'blur', function() {\n                            this.value = this.value.trim();\n                            validate_field(this, true);\n                        });\n                        addEvent(input, 'input', function() {\n                            validate_field(this, true);\n                        });\n                    } else if (input.type == 'radio' || input.type == 'checkbox') {\n                        (function(el) {\n                            function getElementsArray(name){\n                                const value =  form_to_submit.elements[name];\n                                if (Array.isArray(value)){\n                                    return value;\n                                }\n                                return [value];\n                            }\n                            var radios = getElementsArray(el.name);\n                            for (var i = 0; i < radios.length; i++) {\n                                addEvent(radios[i], 'change', function() {\n                                    validate_field(el, true);\n                                });\n                            }\n                        })(input);\n                    } else if (input.tagName == 'SELECT') {\n                        addEvent(input, 'change', function() {\n                            validate_field(this, true);\n                        });\n                    } else if (input.type == 'textarea'){\n                        addEvent(input, 'input', function() {\n                            validate_field(this, true);\n                        });\n                    }\n                }\n            }\n        }\n        remove_tooltips();\n        for (var i = 0, len = allInputs.length; i < len; i++) {\n            var elem = allInputs[i];\n            if (needs_validate(elem)) {\n                if (elem.tagName.toLowerCase() !== \"select\") {\n                    elem.value = elem.value.trim();\n                }\n                validate_field(elem) ? true : no_error = false;\n            }\n        }\n        if (!no_error && e) {\n            e.preventDefault();\n        }\n        resize_tooltips();\n        return no_error;\n    };\n    addEvent(window, 'resize', resize_tooltips);\n    addEvent(window, 'scroll', resize_tooltips);\n\n    window['recaptcha_callback'] = function() {\n  \/\/ Get all recaptchas in the DOM (there may be more than one form on the page).\n  var recaptchas = document.getElementsByClassName(\"g-recaptcha\");\n  for (var i in recaptchas) {\n    \/\/ Set the recaptcha element ID, so the recaptcha can be applied to each element.\n    var recaptcha_id = \"recaptcha_\" + i;\n    recaptchas[i].id = recaptcha_id;\n    var el = document.getElementById(recaptcha_id);\n    if (el != null) {\n      var sitekey = el.getAttribute(\"data-sitekey\");\n      var stoken = el.getAttribute(\"data-stoken\");\n      grecaptcha.render(recaptcha_id, {\"sitekey\":sitekey,\"stoken\":stoken});\n    }\n  }\n};    _load_script(\"https:\/\/www.google.com\/recaptcha\/api.js?onload=recaptcha_callback&render=explicit\");\n    var _form_serialize = function(form){if(!form||form.nodeName!==\"FORM\"){return }var i,j,q=[];for(i=0;i<form.elements.length;i++){if(form.elements[i].name===\"\"){continue}switch(form.elements[i].nodeName){case\"INPUT\":switch(form.elements[i].type){case\"tel\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].previousSibling.querySelector('div.iti__selected-dial-code').innerText)+encodeURIComponent(\" \")+encodeURIComponent(form.elements[i].value));break;case\"text\":case\"number\":case\"date\":case\"time\":case\"hidden\":case\"password\":case\"button\":case\"reset\":case\"submit\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"checkbox\":case\"radio\":if(form.elements[i].checked){q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value))}break;case\"file\":break}break;case\"TEXTAREA\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"SELECT\":switch(form.elements[i].type){case\"select-one\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break;case\"select-multiple\":for(j=0;j<form.elements[i].options.length;j++){if(form.elements[i].options[j].selected){q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].options[j].value))}}break}break;case\"BUTTON\":switch(form.elements[i].type){case\"reset\":case\"submit\":case\"button\":q.push(form.elements[i].name+\"=\"+encodeURIComponent(form.elements[i].value));break}break}}return q.join(\"&\")};\n\n    const formSupportsPost = false;\n    var form_submit = function(e) {\n\n        e.preventDefault();\n        if (validate_form()) {\n            if(form_to_submit.querySelector('input[name=\"phone\"]') && typeof iti != 'undefined') {\n                form_to_submit.querySelector('input[name=\"phone\"]').value = iti.getNumber();\n            }\n            \/\/ use this trick to get the submit button & disable it using plain javascript\n            var submitButton = e.target.querySelector('#_form_311_submit');\n            submitButton.disabled = true;\n            submitButton.classList.add('processing');\n                    var serialized = _form_serialize(document.getElementById('_form_311_')).replace(\/%0A\/g, '\\\\n');\n            var err = form_to_submit.querySelector('._form_error');\n            err ? err.parentNode.removeChild(err) : false;\n            async function submitForm() {\n                var formData = new FormData();\n                const searchParams = new URLSearchParams(serialized);\n                searchParams.forEach((value, key) => {\n                    if (key !== 'hideButton') {\n                        formData.append(key, value);\n                    }\n                });\n                let request = {\n                    headers: {\n                        \"Accept\": \"application\/json\"\n                    },\n                    body: formData,\n                    method: \"POST\"\n                };\n\n                let pageUrlParams = new URLSearchParams(window.location.search);\n                if (pageUrlParams.has('t')) {\n                    request.headers.Authorization = 'Bearer ' + pageUrlParams.get('t');\n                }\n                const response = await fetch('https:\/\/deandelafuenteromero.activehosted.com\/proc.php?jsonp=true', request);\n\n                return response.json();\n            }\n            if (formSupportsPost) {\n                submitForm().then((data) => {\n                    eval(data.js);\n                }).catch(() => {\n                    _show_error(\"311\", \"Lo sentimos, ocurri\u00f3 un error con el env\u00edo. Vuelve a intentarlo.\");\n                });\n            } else {\n                _load_script('https:\/\/deandelafuenteromero.activehosted.com\/proc.php?' + serialized + '&jsonp=true', null, true);\n            }\n        }\n        return false;\n    };\n    addEvent(form_to_submit, 'submit', form_submit);\n})();\n\n<\/script><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">How to build an SEO strategy for SaaS step by step? (real case)<\/h2>\n\n\n\n<p>Next, I want to walk you through the most important points when implementing an SEO strategy for SaaS. To do it, I\u2019ll use our experience doing SEO for DinoRANK as a real example.<\/p>\n\n\n\n<p>Although we could use many other tools to do SEO, at DinoRANK, an SEO SaaS, we use our own tool to run SEO on the site.<\/p>\n\n\n\n<p>In this guide, I\u2019ll show you how we work on SEO so you can replicate the process in your own SaaS project.<\/p>\n\n\n\n<p>Ready to come along?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Identify your goals and define KPIs <\/h3>\n\n\n\n<p>When you\u2019re about to launch an SEO strategy, it\u2019s essential to define the goals you want to achieve.<\/p>\n\n\n\n<p>Goals should be as concise and realistic as possible. Otherwise, you risk never hitting them or, even worse, not knowing for sure whether you\u2019ve actually reached them.<\/p>\n\n\n\n<p>\u201cIncrease sales\u201d wouldn\u2019t be a valid goal. \u201cIncrease sales by 15% over the next two months\u201d would be.<\/p>\n\n\n\n<p>To know whether our actions are paying off, we\u2019ll use KPIs.<\/p>\n\n\n\n<p>A KPI (key performance indicator) is a specific metric that gives us objective information about the results of a set of actions.<\/p>\n\n\n\n<p>The number of sales, the volume of organic visits to our website, pages viewed per user, bounce rate, or the number of ranked keywords are all measures that can signal how our SaaS SEO strategy is performing.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"633\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/image.png\" alt=\"SEO for SaaS: Identify your goals and define KPIs\" class=\"wp-image-22988\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/image.png 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/image-300x185.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/image-768x475.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">2. Know about your ideal customer<\/h3>\n\n\n\n<p>If you want your SaaS \u2014or any product or service you create\u2014 to succeed, you need to clearly identify exactly who you should be targeting.<\/p>\n\n\n\n<p>This means defining your ideal customer, a concept in marketing known as the <em>buyer persona<\/em>.<\/p>\n\n\n\n<p>You should know every detail about this ideal customer: their knowledge level, age, motivations, goals, and most importantly, their pain points (what problems or concerns they have).<\/p>\n\n\n\n<p>Remember, your SaaS is a solution to their problems, which is why you need to understand them perfectly.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/09\/ok-seo-saas-cliente-ideal.png\" alt=\"\" class=\"wp-image-21823\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/09\/ok-seo-saas-cliente-ideal.png 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/09\/ok-seo-saas-cliente-ideal-300x152.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/09\/ok-seo-saas-cliente-ideal-768x390.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p><strong>You\u2019ll also need to define the <em>customer journey<\/em><\/strong>. This involves identifying the stages a user goes through from the moment they feel a need to the moment they satisfy it.<\/p>\n\n\n\n<p>This journey will vary depending on the situation, but it usually includes the following stages:<\/p>\n\n\n<div class=\"su-list\" style=\"margin-left:0px\">\n\n\n\n<ul class=\"wp-block-list\">\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> <strong>Awareness<\/strong> \u2013 The potential customer has a problem and discovers the existence of a brand that can solve it.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> <strong>Evaluation<\/strong> \u2013 The customer researches the brand\u2019s services and compares them to other options on the market.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> <strong>Purchase<\/strong> \u2013 The customer decides the brand\u2019s solution best fits their needs and makes the purchase.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> <strong>Loyalty<\/strong> \u2013 The customer has used the product or service, liked it, and will continue using it. They may even buy other products or services from the same brand.<\/li>\n<\/ul>\n\n\n\n<\/div>\n\n\n\n<p>Knowing your ideal customer, their problems, and their decision-making or buying process is crucial when designing the elements of an SEO strategy for your SaaS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Analyze what your competitors are doing<\/h3>\n\n\n\n<p>You should never lose sight of what your competitors are up to. After all, we all want the same thing: to improve the sales of our SaaS.<\/p>\n\n\n\n<p>And we put all our efforts into achieving it.<\/p>\n\n\n\n<p>Some strategies work better than others, and knowing them in advance can save us a lot of time and money.<\/p>\n\n\n\n<p>If you know which other projects you\u2019re competing against and analyze what they\u2019ve done, you can find valuable ideas to apply for your own benefit.<\/p>\n\n\n\n<p>With DinoRANK, we can identify the keywords that are bringing the most traffic to our competitors and integrate them into our content strategy.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"436\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keywords-ranking-on-Google.jpg\" alt=\"\nKeywords-ranking-on-Google\" class=\"wp-image-22990\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keywords-ranking-on-Google.jpg 900w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keywords-ranking-on-Google-300x145.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keywords-ranking-on-Google-768x372.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>If we want to get straight to the point, we also have a feature called <em>Content Gap<\/em> that directly shows us the content other websites are ranking for but we aren\u2019t yet.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"901\" height=\"298\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Content-Gap.jpg\" alt=\"Content Gap\" class=\"wp-image-22991\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Content-Gap.jpg 901w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Content-Gap-300x99.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Content-Gap-768x254.jpg 768w\" sizes=\"(max-width: 901px) 100vw, 901px\" \/><\/figure><\/div>\n\n\n<p>And we can also find out which sites are linking to them, so we can replicate their link building strategy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"486\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Backlinks-Analysis.jpg\" alt=\"Backlinks Analysis\" class=\"wp-image-22993\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Backlinks-Analysis.jpg 900w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Backlinks-Analysis-300x162.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Backlinks-Analysis-768x415.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure><\/div>\n\n\n<p>In short, competitor analysis gives us highly valuable information for planning our SaaS SEO strategy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Do in-depth keyword research<\/h3>\n\n\n\n<p>We\u2019ve reached one of the most important tasks in SEO: keyword research.<\/p>\n\n\n\n<p class=\"has-background\" style=\"background-color:#eef9f3\"><strong>Identifying the strategic keywords you want to rank <\/strong>for is essential if you want to get results.<\/p>\n\n\n\n<p>But how do you identify those keywords?<\/p>\n\n\n\n<p>Well, if you\u2019ve completed the previous steps, you\u2019re already ahead of the game.<\/p>\n\n\n\n<p>Understanding <strong>the pain points of your potential customers<\/strong> gives you a solid list of keywords to start with.<\/p>\n\n\n\n<p>Now, simply run them through a keyword research tool like DinoRANK to uncover other related keywords.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keyword-research-for-SEO-tool-1024x550.jpg\" alt=\"Keyword research for SEO tool\" class=\"wp-image-22994\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keyword-research-for-SEO-tool-1024x550.jpg 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keyword-research-for-SEO-tool-300x161.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keyword-research-for-SEO-tool-768x413.jpg 768w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Keyword-research-for-SEO-tool.jpg 1489w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>During this analysis, pay close attention to keywords made up of several terms with low search volume. These are long-tail keywords, which are easier to rank for and are essential for giving your website an initial boost.<\/p>\n\n\n\n<p>On the other hand, your competitor analysis will also have helped you uncover a solid set of keywords to add to your SEO strategy.<\/p>\n\n\n\n<p>Another group of keywords you can include during your keyword research are competitor brand keywords. <\/p>\n\n\n\n<p>These types of keywords are particularly interesting because they allow you to appear for search terms related to competing brands and \u201csteal\u201d their traffic and sales.<\/p>\n\n\n<div class=\"su-list\" style=\"margin-left:0px\">\n\n\n\n<ul class=\"wp-block-list\">\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Here\u2019s an example:<\/li>\n<\/ul>\n\n\n\n<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/dinorank.com\/en-us\/blog-seo\/alternatives-se-ranking\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"340\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/07\/Best-Alternatives-to-Se-Ranking.webp\" alt=\"\" class=\"wp-image-21460\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/07\/Best-Alternatives-to-Se-Ranking.webp 1000w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/07\/Best-Alternatives-to-Se-Ranking-300x102.webp 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/07\/Best-Alternatives-to-Se-Ranking-768x261.webp 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure><\/div>\n\n\n<p>As you can see, when a user searches for a competitor on Google, our website appears among the search results. This drives qualified clicks our way, which we can quickly work to convert through our content.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"694\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/SeRanking-Alternatives.jpg\" alt=\"Se Ranking Alternatives top1\" class=\"wp-image-22997\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/SeRanking-Alternatives.jpg 900w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/SeRanking-Alternatives-300x231.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/SeRanking-Alternatives-768x592.jpg 768w\" sizes=\"(max-width: 900px) 100vw, 900px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">5. Organize your keywords by search intent and align them with your business <\/h3>\n\n\n\n<p>Now that you have your list of keywords, you need to organize them based on the user\u2019s search intent.<\/p>\n\n\n\n<p>To make this classification, it\u2019s very helpful to have a deep understanding of your ideal customer\u2019s journey, as it will allow you to determine whether a keyword is closer or further from the sales stage.<\/p>\n\n\n\n<p>The concept of a sales funnel is common in marketing and represents exactly this idea. At the wide top of the funnel are the more informational searches, while at the bottom are the searches from people with clear buying intent.<\/p>\n\n\n\n<p>Identifying the intent behind each keyword is essential if we want our content to have any chance of ranking in search engines.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"759\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Web-architecture-1024x759.jpg\" alt=\"Web Architecture DinoBRAIN\" class=\"wp-image-22998\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Web-architecture-1024x759.jpg 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Web-architecture-300x222.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Web-architecture-768x569.jpg 768w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/Web-architecture.jpg 1079w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">6. Create high-quality content<\/h3>\n\n\n\n<p>When creating content for our website, we should always aim for quality and provide a definitive solution to the problem we\u2019re addressing.<\/p>\n\n\n\n<p>So, does that mean we can\u2019t create content with artificial intelligence?<\/p>\n\n\n\n<p>That\u2019s not what I mean. AI can be very useful for generating certain types of text, but it\u2019s true that for others it may not be the best choice.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"502\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK-1024x502.png\" alt=\"\" class=\"wp-image-21126\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK-1024x502.png 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK-300x147.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK-768x377.png 768w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK-1536x753.png 1536w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2024\/05\/DinoBRAIN-the-artificial-intelligence-for-SEO-by-DinoRANK.png 1845w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>Specifically, if we need to produce an informational piece aimed at the top of the sales funnel, AI can deliver a solid result.<\/p>\n\n\n\n<p>But when creating content that drives conversions or addresses a customer\u2019s pain points in a more personal way, it\u2019s essential to go beyond what AI can provide ensuring the content resonates on a human level and maintains a genuine, authentic connection with your audience.<\/p>\n\n\n\n<p>One way to approach this is\u00a0<a href=\"https:\/\/aiseo.ai\/humanize-ai\" target=\"_blank\" rel=\"noreferrer noopener\">Humanize AI<\/a>\u00a0which refines machine-generated text so it feels more natural, authentic, and aligned with your brand voice. By humanizing AI SaaS teams can balance efficiency with genuine connection, ensuring that content attracts readers while still building trust.<\/p>\n\n\n\n<p>With <a href=\"https:\/\/dinobrain.ai\" data-type=\"link\" data-id=\"https:\/\/dinobrain.ai\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>DinoBRAIN<\/strong><\/a>, you can easily create texts that are already SEO-optimized, which means they\u2019re likely to rank quite well.<\/p>\n\n\n\n<p>However, for content that\u2019s closer to the buying decision stage, I don\u2019t recommend writing it with AI.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"434\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/How-does-DinoBRAIN-work-1024x434.jpg\" alt=\"How does DinoBRAIN work\" class=\"wp-image-23000\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/How-does-DinoBRAIN-work-1024x434.jpg 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/How-does-DinoBRAIN-work-300x127.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/How-does-DinoBRAIN-work-768x326.jpg 768w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/08\/How-does-DinoBRAIN-work.jpg 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>A well-crafted sales landing page copy can make the difference when it comes to convincing a potential customer.<\/p>\n\n\n\n<p>Similarly, a comparative analysis between tools written by an expert who has actually used them as part of their work \u2014 and includes real usage examples \u2014 will be extremely valuable to the user and will greatly increase their trust in the accuracy of your site\u2019s content.<\/p>\n\n\n\n<p><strong>7. Optimize your on-page SEO and internal linking<\/strong><\/p>\n\n\n\n<p>On-page SEO covers a wide range of actions that every SEO professional should know and apply to boost their page rankings.<\/p>\n\n\n\n<p>Explaining it in detail could fill several articles. In fact, you can find plenty of information about it on the DinoRANK blog.<\/p>\n\n\n\n<p>Since I want this guide to be practical, here\u2019s a list of actions you should take to take care of your site\u2019s on-page SEO.<\/p>\n\n\n<div class=\"su-box su-box-style-default\" id=\"\" style=\"border-color:#00604a;border-radius:3px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#00937D;color:#FFFFFF;border-top-left-radius:1px;border-top-right-radius:1px\">Here\u2019s a concise, step\u2011by\u2011step plan you can follow:<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:1px;border-bottom-right-radius:1px\">\n\n\n<div class=\"su-list\" style=\"margin-left:0px\">\n\n\n\n<ul class=\"wp-block-list\">\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Run an SEO audit to fix errors.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Optimize your content from an SEO perspective.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Avoid duplicate content.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Monitor your page loading speed.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Check your site\u2019s indexing.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Review the internal linking between your content.<\/li>\n<\/ul>\n\n\n\n<\/div> <\/div><\/div>\n\n\n\n<p>Regarding the last point, I want to emphasize the importance of proper internal linking.<\/p>\n\n\n\n<p>When you link content to other pages, you\u2019re not only pointing the user toward other useful information \u2014 you\u2019re also signaling to Google which other pages on your site are important and should be crawled.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"464\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Internal-linking-1024x464.jpg\" alt=\"Internal linking\" class=\"wp-image-22253\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Internal-linking-1024x464.jpg 1024w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Internal-linking-300x136.jpg 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Internal-linking-768x348.jpg 768w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Internal-linking.jpg 1500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p>That\u2019s why, to improve your SaaS sales, it\u2019s a good idea to create quality informational content and link from there to your most transactional pages.<\/p>\n\n\n\n<p>This way, you distribute authority and guide the user naturally toward making a purchase.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">8. Work on your off-page SEO<\/h3>\n\n\n\n<p>Once you\u2019ve made sure all the elements on your site are optimized, it\u2019s time to focus on external factors.<\/p>\n\n\n\n<p>Here\u2019s a comprehensive guide to help you work on your site\u2019s off-page SEO. In short, the most important actions are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Designing a link-building strategy.<\/li>\n\n\n\n<li>Publishing on social media.<\/li>\n\n\n\n<li>Building your brand through outreach efforts.<\/li>\n<\/ul>\n\n\n\n<p>Regarding link building, we\u2019ve already seen how analyzing your competitors can give you ideas for external links you might want to acquire.<\/p>\n\n\n\n<p>But at this stage, I don\u2019t want you to get obsessed with getting exactly the same backlinks as your competition. When planning a link-building strategy, your priority should always be to create high-quality links \u2014 thematically relevant ones that can bring you traffic.<\/p>\n\n\n\n<p>Think of your backlinks like billboards in strategic locations, designed to capture more customers.<\/p>\n\n\n\n<p>The same applies to social media. If we know how to leverage its potential, it\u2019s a powerful channel to gain visibility and showcase the benefits of our solution.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">9. Take care of EEAT <\/h3>\n\n\n\n<p>At the beginning of this post, we talked about trust \u2014 a factor in SEO that is closely tied to EEAT.<\/p>\n\n\n\n<p>EEAT stands for Experience, Expertise, Authoritativeness, and Trust, and it\u2019s something Google is paying more and more attention to, especially in certain industries.<\/p>\n\n\n\n<p>If your website\u2019s goal is to sell something, EEAT is almost essential.<\/p>\n\n\n\n<p>But not just because Google says so \u2014 credibility and trust are key for anyone to be willing to buy what you offer.<\/p>\n\n\n\n<p>For a SaaS, there are many actions you can take to strengthen EEAT.<\/p>\n\n\n<div class=\"su-box su-box-style-default\" id=\"\" style=\"border-color:#00604a;border-radius:3px;max-width:none\"><div class=\"su-box-title\" style=\"background-color:#00937D;color:#FFFFFF;border-top-left-radius:1px;border-top-right-radius:1px\">Some of the most important are:<\/div><div class=\"su-box-content su-u-clearfix su-u-trim\" style=\"border-bottom-left-radius:1px;border-bottom-right-radius:1px\">\n\n\n<div class=\"su-list\" style=\"margin-left:0px\">\n\n\n\n<ul class=\"wp-block-list\">\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Provide information about every member of the team behind the project.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Upload real-time demo videos of the SaaS in action.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Offer clear details about specifications, pricing, and payment terms.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Publish complete, high-quality guides on different topics related to your niche.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Honestly compare your SaaS with other competing solutions, showing both pros and cons.<\/li>\n\n\n\n<li><i class=\"sui sui-check\" style=\"color:#00937D\"><\/i> Display genuine user reviews.<\/li>\n<\/ul>\n\n\n\n<\/div> <\/div><\/div>\n\n\n\n<p>All of these actions help improve your brand image and make users see you as a serious and trustworthy project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">10. Measure and analyze your results <\/h3>\n\n\n\n<p>Once you\u2019ve implemented all the steps of your SEO strategy for SaaS, it\u2019s time to evaluate the results using the KPIs you defined in step one.<\/p>\n\n\n\n<ol start=\"10\" class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n\n<p>At this stage, Google Search Console and Google Analytics are two key tools that can give you much of the data you need.<\/p>\n\n\n\n<p>But they\u2019re not the only ones.<\/p>\n\n\n\n<p>Personally, one of the things I like to keep the closest eye on is the performance of the project\u2019s most important keywords.<\/p>\n\n\n\n<p>For this, <a href=\"https:\/\/dinorank.com\/en\/seccion-tracking\/\" target=\"_blank\" rel=\"noreferrer noopener\">DinoRANK\u2019s position tracking<\/a> has become an essential part of my daily workflow.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"351\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Position-tracking.webp\" alt=\"\" class=\"wp-image-22291\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Position-tracking.webp 800w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Position-tracking-300x132.webp 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/03\/Position-tracking-768x337.webp 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n<p>Thanks to this feature, I always have a clear and complete view of the project\u2019s overall progress and of each keyword\u2019s performance in particular.<\/p>\n\n\n\n<p>This way, I can decide with great precision which areas to focus my efforts on to give the entire SEO strategy a boost.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions on SEO for SaaS<\/h2>\n\n\n\n<p>Throughout my career, I\u2019ve seen software companies with very powerful products that had to stop selling.<\/p>\n\n\n\n<p>The reason: they didn\u2019t know how to capture the public\u2019s attention.<\/p>\n\n\n\n<p>Digital marketing is essential today if you want to make your product known and generate interest around it. But sometimes, it doesn\u2019t get the attention and resources needed to make that happen.<\/p>\n\n\n\n<p>SEO for SaaS <strong>is part of these online marketing strategies<\/strong>. When executed correctly, it can deliver significant long-term benefits.<\/p>\n\n\n\n<p>In this article, I\u2019ve shown you <strong>how you can grow a SaaS project using SEO<\/strong> through 10 very specific steps that will help you attract more customers by leveraging the visibility provided by search engines.<\/p>\n\n\n\n<p>So, if you have a SaaS, I encourage you to start working on SEO as soon as possible \u2014 you\u2019ll see that sooner rather than later, your sales will start to improve substantially.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/dinorank.com\/en-us\/blog-seo\/discover-dinorank\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1000\" height=\"450\" src=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords.png\" alt=\"Find the best keywords\" class=\"wp-image-22028\" srcset=\"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords.png 1000w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords-300x135.png 300w, https:\/\/dinorank.com\/en-us\/blog-seo\/wp-content\/uploads\/2025\/01\/Find-the-best-keywords-768x346.png 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>If you\u2019ve ever been part of a software project, you know that developing a web application is an expensive process filled with obstacles. That\u2019s why many people think that once the product is finished, the hard work is over. In reality, it\u2019s only the beginning. The toughest part starts now: getting someone to actually pay [&hellip;]<\/p>\n","protected":false},"author":32,"featured_media":23005,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[52],"tags":[],"class_list":["post-22952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo-for"],"acf":[],"_links":{"self":[{"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/posts\/22952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/comments?post=22952"}],"version-history":[{"count":18,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/posts\/22952\/revisions"}],"predecessor-version":[{"id":23125,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/posts\/22952\/revisions\/23125"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/media\/23005"}],"wp:attachment":[{"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/media?parent=22952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/categories?post=22952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dinorank.com\/en-us\/blog-seo\/wp-json\/wp\/v2\/tags?post=22952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}