It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://www.rinjanisamalas.net/

  1. <!doctype html>
  2. <html lang="id">
  3. <head>
  4. <meta charset="UTF-8" />
  5.    <meta http-equiv="Content-Security-Policy" content="
  6.      default-src 'self';
  7.      script-src 'self' https://www.paypal.com https://www.sandbox.paypal.com https://api.emailjs.com https://images.dmca.com 'unsafe-inline';
  8.      style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
  9.      img-src 'self' data: https://storage.googleapis.com https://images.unsplash.com https://horizons-cdn.hostinger.com https://images.dmca.com;
  10.      font-src 'self' https://fonts.gstatic.com;
  11.      connect-src 'self' wss: *.supabase.co https://api.emailjs.com *.paypal.com;
  12.      frame-src 'self' https://www.paypal.com https://www.sandbox.paypal.com;
  13.      object-src 'none';
  14.      base-uri 'self';
  15.      form-action 'self';
  16.      frame-ancestors 'none';
  17.    ">
  18. <link rel="icon" href="/rinjani-samalas-favicon.png" />
  19.    <link rel="apple-touch-icon" href="/rinjani-samalas-favicon.png" />
  20. <meta name="generator" content="Hostinger Horizons" />
  21.    <meta name="google-site-verification" content="o3V3B18t5C3y5gqU-jS1D9C8x7p6E5F4G3H2J1k0l9i8" />
  22. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  23. <title>Rinjani Samalas Trekking Official | Mount Rinjani Hiking Tour Agency</title>
  24. <meta name="description" content="Experience trekking Mount Rinjani Lombok with the best Rinjani trekking company. Rinjani Samalas is a licensed tour organizer providing expert guides and eco-tours. Explore our Rinjani trekking packages today for your Mount Rinjani hiking tour." />
  25.    <link rel="preconnect" href="https://fonts.googleapis.com">
  26.    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  27.    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap" media="print" onload="this.media='all'">
  28.    <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700;800;900&display=swap"></noscript>
  29. <script type="module" crossorigin src="/assets/index-fc805543.js"></script>
  30. <link rel="stylesheet" href="/assets/index-02f116ee.css">
  31. <script type="module">
  32. window.onerror = (message, source, lineno, colno, errorObj) => {
  33. const errorDetails = errorObj ? JSON.stringify({
  34. name: errorObj.name,
  35. message: errorObj.message,
  36. stack: errorObj.stack,
  37. source,
  38. lineno,
  39. colno,
  40. }) : null;
  41.  
  42. window.parent.postMessage({
  43. type: 'horizons-runtime-error',
  44. message,
  45. error: errorDetails
  46. }, '*');
  47. };
  48. </script>
  49. <script type="module">
  50. const observer = new MutationObserver((mutations) => {
  51. for (const mutation of mutations) {
  52. for (const addedNode of mutation.addedNodes) {
  53. if (
  54. addedNode.nodeType === Node.ELEMENT_NODE &&
  55. (
  56. addedNode.tagName?.toLowerCase() === 'vite-error-overlay' ||
  57. addedNode.classList?.contains('backdrop')
  58. )
  59. ) {
  60. handleViteOverlay(addedNode);
  61. }
  62. }
  63. }
  64. });
  65.  
  66. observer.observe(document.documentElement, {
  67. childList: true,
  68. subtree: true
  69. });
  70.  
  71. function handleViteOverlay(node) {
  72. if (!node.shadowRoot) {
  73. return;
  74. }
  75.  
  76. const backdrop = node.shadowRoot.querySelector('.backdrop');
  77.  
  78. if (backdrop) {
  79. const overlayHtml = backdrop.outerHTML;
  80. const parser = new DOMParser();
  81. const doc = parser.parseFromString(overlayHtml, 'text/html');
  82. const messageBodyElement = doc.querySelector('.message-body');
  83. const fileElement = doc.querySelector('.file');
  84. const messageText = messageBodyElement ? messageBodyElement.textContent.trim() : '';
  85. const fileText = fileElement ? fileElement.textContent.trim() : '';
  86. const error = messageText + (fileText ? ' File:' + fileText : '');
  87.  
  88. window.parent.postMessage({
  89. type: 'horizons-vite-error',
  90. error,
  91. }, '*');
  92. }
  93. }
  94. </script>
  95. <script type="module">
  96. const originalConsoleError = console.error;
  97. console.error = function(...args) {
  98. originalConsoleError.apply(console, args);
  99.  
  100. let errorString = '';
  101.  
  102. for (let i = 0; i < args.length; i++) {
  103. const arg = args[i];
  104. if (arg instanceof Error) {
  105. errorString = arg.stack || `${arg.name}: ${arg.message}`;
  106. break;
  107. }
  108. }
  109.  
  110. if (!errorString) {
  111. errorString = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' ');
  112. }
  113.  
  114. window.parent.postMessage({
  115. type: 'horizons-console-error',
  116. error: errorString
  117. }, '*');
  118. };
  119. </script>
  120. <script type="module">
  121. const originalFetch = window.fetch;
  122.  
  123. window.fetch = function(...args) {
  124. const url = args[0] instanceof Request ? args[0].url : args[0];
  125.  
  126. // Skip WebSocket URLs
  127. if (url.startsWith('ws:') || url.startsWith('wss:')) {
  128. return originalFetch.apply(this, args);
  129. }
  130.  
  131. return originalFetch.apply(this, args)
  132. .then(async response => {
  133. const contentType = response.headers.get('Content-Type') || '';
  134.  
  135. // Exclude HTML document responses
  136. const isDocumentResponse =
  137. contentType.includes('text/html') ||
  138. contentType.includes('application/xhtml+xml');
  139.  
  140. if (!response.ok && !isDocumentResponse) {
  141. const responseClone = response.clone();
  142. const errorFromRes = await responseClone.text();
  143. const requestUrl = response.url;
  144. console.error(`Fetch error from ${requestUrl}: ${errorFromRes}`);
  145. }
  146.  
  147. return response;
  148. })
  149. .catch(error => {
  150. if (!url.match(/.html?$/i)) {
  151. console.error(error);
  152. }
  153.  
  154. throw error;
  155. });
  156. };
  157. </script>
  158. </head>
  159. <body>
  160. <div id="root"></div>
  161. </body>
  162. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda